Я установил расширение 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()
{
}
}
}
Код: Выделить всё
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();
Код: Выделить всё
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);
}
}
}
Код: Выделить всё
{
"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"
}
}
Строка, на которую указывал инструмент справки, имела отступ на 10 пробелов. . Не рекомендуется ли делать отступы в коде?
Подробнее здесь: https://stackoverflow.com/questions/782 ... ical-title
Мобильная версия