EF CORE CLI: «Невозможно создать ошибку« DBContext »типа ''» при запуске миграции из многопроектного решенияC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 EF CORE CLI: «Невозможно создать ошибку« DBContext »типа ''» при запуске миграции из многопроектного решения

Сообщение Anonymous »

Я работаю над приложением ASP.net Core MVC с слоистой архитектурой (домен, инфраструктура, веб -сайт). Я пытаюсь запустить EF Core Migrations из проекта Gemsirisdimvc.infrastructure при использовании Gemsirisdimvc.web в качестве проекта запуска.

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

GemsIrisDiMvc.Application/
GemsIrisDiMvc.Domain/
GemsIrisDiMvc.Infrastructure/
│   ├── Data/
│   │   └── ApplicationDbContext.cs
│   ├── ApplicationDbContextFactory.cs
│   └── Migrations/
GemsIrisDiMvc.Web/
│   ├── appsettings.json
│   └── Program.cs
< /code>
Команда: < /p>
dotnet ef migrations add InitialCreate --project GemsIrisDiMvc.Infrastructure --startup-project GemsIrisDiMvc.Web
< /code>
Я получаю эту ошибку: < /p>

Невозможно создать «dbcontext» типа '. Исключение «Справочник объекта не устанавливается на экземпляр объекта». был брошен при попытке создать экземпляр.  < /p>
< /blockquote>
ApplicationDbContext.cs
(in gemsirisdimvc.infrastructure/data )

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

using GemsIrisDiMvc.Domain.Entities;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;

namespace GemsIrisDiMvc.Infrastructure.Data
{
public class ApplicationDbContext : IdentityDbContext
{
public ApplicationDbContext(DbContextOptions options) : base(options) { }

public DbSet Invoices { get; set; }
public DbSet InvoiceItems { get; set; }

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.ApplyConfigurationsFromAssembly(typeof(ApplicationDbContext).Assembly);
}
}
}
< /code>
ApplicationDbContextFactory.cs
(in gemsirisdimvc.infrastructure )

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

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.Extensions.Configuration;

namespace GemsIrisDiMvc.Infrastructure.Data
{
public class ApplicationDbContextFactory : IDesignTimeDbContextFactory
{
public ApplicationDbContext CreateDbContext(string[] args)
{
// Get the path to the Web project's appsettings.json
var path = Path.GetFullPath(Path.Combine(Directory.GetCurrentDirectory(), "../GemsIrisDiMvc.Web"));

IConfigurationRoot configuration = new ConfigurationBuilder()
.SetBasePath(path)
.AddJsonFile("appsettings.json")
.AddJsonFile("appsettings.Development.json", optional: true)
.Build();

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

if (string.IsNullOrEmpty(connectionString))
{
throw new InvalidOperationException("The connection string 'DefaultConnection' was not found in appsettings.json.");
}

optionsBuilder.UseSqlServer(connectionString);

return new ApplicationDbContext(optionsBuilder.Options);
}
}
}
< /code>
Program.cs
(в Gemsirisdimvc.web )

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

using GemsIrisDiMvc.Domain.Entities;
using GemsIrisDiMvc.Infrastructure.Data;
using GemsIrisDiMvc.Infrastructure.Extensions;
using GemsIrisDiMvc.Infrastructure.HttpClients;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using System.Security.Authentication;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container
builder.Services.AddDbContext(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));

//builder.Services.AddHttpClient()
//    .ConfigurePrimaryHttpMessageHandler(() =>  new HttpClientHandler
//    {
//        SslProtocols = SslProtocols.Tls12 // ✅ Enforce TLS 1.2
//    });

// Add Identity services
builder.Services.AddIdentity(options =>
{
options.SignIn.RequireConfirmedAccount = false;
options.Password.RequireDigit = true;
options.Password.RequireLowercase = true;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequireUppercase = true;
options.Password.RequiredLength = 6;
options.Password.RequiredUniqueChars = 1;
})
.AddEntityFrameworkStores()
.AddDefaultTokenProviders();

// Configure cookie authentication
builder.Services.ConfigureApplicationCookie(options =>
{
options.LoginPath = "/Account/Login";
options.LogoutPath = "/Account/Logout";
options.AccessDeniedPath = "/Account/AccessDenied";
options.ExpireTimeSpan = TimeSpan.FromMinutes(60);
options.SlidingExpiration = true;
});

// Add Infrastructure services
builder.Services.AddInfrastructureServices(builder.Configuration);

// Add MVC
builder.Services.AddControllersWithViews();

// Add Swagger for API documentation
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// Configure the HTTP request pipeline
if (app.Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}

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

app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

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

// Ensure database is created and migrations applied
using (var scope = app.Services.CreateScope())
{
var context = scope.ServiceProvider.GetRequiredService();
try
{
context.Database.Migrate();
}
catch (Exception ex)
{
var logger = scope.ServiceProvider.GetRequiredService();
logger.LogError(ex, "An error occurred while applying migrations or creating the database.");
}
}

app.Run();
< /code>
Despite having the IDesignTimeDbContextFactory
На месте и все правильные ссылки на проекты и пакеты, EF Core CLI по -прежнему не может создать dbcontext во время дизайна.
Что я делаю неправильно? Есть ли лучший способ структурировать или ссылаться на вещи, поэтому Dotnet EF может разрешить контекст?

Подробнее здесь: https://stackoverflow.com/questions/796 ... nning-migr
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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