Когда я пытаюсь добавить свою первую миграцию в проект, я получаю следующую ошибку
No database provider has been configured for this DbContext. A provider can be configured by overriding the DbContext.OnConfiguring method or by using AddDbContext on the application service provider. If AddDbContext is used, then also ensure that your DbContext type accepts a DbContextOptions<TContext> object in its constructor and passes it to the base constructor for DbContext
Я пытаюсь добиться того, чтобы мой код, который заботится о БД, был в .NETБиблиотека классов Core 3.0 отделена от моего веб-проекта.
Итак, по сути, моя файловая система выглядит следующим образом:
Solution
-MyProject.Data
-MyProject.Domain
-MyProject.Web
Чтобы достичь этого, я нашел способ перенести мой класс БД из Интернета. проект с использованием IDesignTimeDbContextFactory и установить его в моем проекте данных. Но когда я пытаюсь добавить миграции, это не удается.
Большинство ответов предлагают удалить конструктор без параметров из моего DbContext, но это не работает для меня, так как у меня его там никогда не было.
Вот мой код, помощь очень ценится, так как я не нашел ресурсов для такой настройки.
{
public ApiDbContext(DbContextOptions<ApiDbContext> options) : base()
{
}
public DbSet<AplicationUser> AplicationUsers { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
foreach (var relationsship in modelBuilder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys()))
{
relationsship.DeleteBehavior = DeleteBehavior.Restrict;
}
ConfigureModelBuilderForUser(modelBuilder);
}
private void ConfigureModelBuilderForUser(ModelBuilder modelBuilder)
{
}
}
public class TemporaryDbContextFactory : IDesignTimeDbContextFactory<ApiDbContext>
{
public ApiDbContext CreateDbContext(string[] args)
{
var builder = new DbContextOptionsBuilder<ApiDbContext>();
builder.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=xxx;Trusted_Connection=True;MultipleActiveResultSets=true;User=xxx;Password=xxx",
optionsBulder => optionsBulder.MigrationsAssembly(typeof(ApiDbContext).GetTypeInfo().Assembly.GetName().Name));
return new ApiDbContext(builder.Options);
}
}
Эти два класса находятся в моем проекте данных, и в моем веб-проекте у меня есть класс запуска.
{
services.AddEntityFrameworkSqlServer()
.AddDbContext<ApiDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("ApiDbContext"),
options => options.MigrationsAssembly("MyProject.Data")));
services.AddIdentity<AplicationUser, IdentityRole>();
services.AddControllersWithViews();
// In production, the React files will be served from this directory
services.AddSpaStaticFiles(configuration =>
{
configuration.RootPath = "ClientApp/build";
});
}