Для этого DbContext EF Core 3.0 не настроен поставщик базы данных. - PullRequest
1 голос
/ 29 октября 2019

Когда я пытаюсь добавить свою первую миграцию в проект, я получаю следующую ошибку

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";
            });

        }
...