Невозможно разрешить службу для dbContext (извините за такой классический заголовок)C#

Место общения программистов C#
Ответить
Anonymous
 Невозможно разрешить службу для dbContext (извините за такой классический заголовок)

Сообщение Anonymous »

Чтобы получить веб-сайт MVCCore, после сбоя я снова следую указаниям этой темы.
Я установил расширение Visual Studio, вставил четыре ссылки EntityFrameworkCore и набрал обновление базы данных dotnet ef и так далее согласно этой ветке, после замены имени dbContext на правильное значение.
и я прочитал ответ, с ошибками на белом фоне фон, когда он есть.
(есть ли что-нибудь, что мне нужно искать в решении, чтобы убедиться, что этот шаг выполнен правильно?)
И теперь, В дальнейшем я позабочусь об ошибке «невозможно разрешить службу в dbContext», и, учитывая количество различных попыток, которые я сделал, кажется, может помочь, если кто-нибудь сможет более точно указать на эту ошибку, прежде чем я смогу написать краткий синтез. После этого я позабочусь о хранении строки подключения в более конфиденциальном месте, но сначала получение данных на веб-странице может быть интересным шагом.
Как вы понимаете, я мог бы создать контроллер заказов, но когда я пытаюсь отобразить его индексную страницу, получаю сообщение об ошибке

"InvalidOperationException: невозможно разрешить службу для типа
'MVCcumul_01.Models.NorthwindContext', пока попытка активировать
'MVCcumul_01.Controllers.OrdersController'.
Microsoft.Extensions.DependencyInjection.ActivatorUtilities.ThrowHelperUnableToResolveService(Type
type, Type requireBy)"

Я проверил строку подключения (эта ошибка появилась при предыдущей попытке). Данные отображаются правильно из обозревателя серверов в сообществе Visual Studio 2022 и/или из SSMS 19.1 в Windows 11 версии 23H2 (сборка ОС 22631.3296).
Сначала я забыл объявить AddDbContextFactory в ConfigurationServices, затем объявил и его, и NorthwindContext как Singleton, затем оба как Scoped (это должно было работать оба), затем смешал (это не должно было работать, или, возможно, я перепутал, но не для того, чтобы... тратить время на путешествие).
Вот код:
Startup.cs

Код: Выделить всё

using Microsoft.EntityFrameworkCore;
using MVCcumul_01.Models;

namespace MVCcumul_01
{
public class Startup
{

public void ConfigureServices(IServiceCollection services)
{
var connectionString = @"Data Source=.\\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True;Encrypt=True;TrustServer²Certificate=True";

services.AddDbContext(options => options.UseSqlServer(connectionString),
ServiceLifetime.Singleton);

services.AddDbContextFactory(
options => options.UseSqlServer(),
lifetime: ServiceLifetime.Singleton);
}

public void Configure()
{
}

}
}
Program.cs

Код: Выделить всё

using Microsoft.AspNetCore.Hosting;
using MVCcumul_01;

// EF Core uses this method at design time to access the DbContext
static IHostBuilder CreateHostBuilder(string[] args)
=> Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(
webBuilder => webBuilder.UseStartup());

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days.  You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();
ApplicationDbContextFactory.cs

Код: Выделить всё

using Microsoft.EntityFrameworkCore.Design;
using Microsoft.EntityFrameworkCore;

namespace MVCcumul_01.Models
{
internal class ApplicationDbContextFactory : IDesignTimeDbContextFactory
{
NorthwindContext IDesignTimeDbContextFactory.CreateDbContext(string[] args)
{
IConfigurationRoot configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();

var builder = new DbContextOptionsBuilder();
var connectionString = configuration.GetConnectionString("DefaultConnection");

builder.UseSqlServer(connectionString);

return new NorthwindContext(builder.Options);
}
}
}
appsettings.json

Код: Выделить всё

{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"MVCcumul_01Context1": "Server=(localdb)\\mssqllocaldb;Database=MVCcumul_01Context-bfca8e78-d989-4ba3-a265-435e16ece2bb;Trusted_Connection=True;MultipleActiveResultSets=true",
"MVCcumul_01Context": "Data Source=.\\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True;Encrypt=True;Trust Server Certificate=True"
}
}
Меня удивило сообщение об ошибке: «Ваше сообщение содержит код, который не отформатирован должным образом. Пожалуйста, сделайте отступ для всего кода на 4 пробела, используя кнопку панели инструментов кода или сочетание клавиш CTRL+K. Чтобы получить дополнительную помощь по редактированию, щелкните значок [?] на панели инструментов».
Строка, на которую указывал инструмент справки, имела отступ на 10 пробелов. . Не рекомендуется ли делать отступы в коде?

Подробнее здесь: https://stackoverflow.com/questions/782 ... ical-title
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»