Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework core Ef core创建数据库时无需迁移,即完全只需代码优先模型_Entity Framework Core_Ef Code First - Fatal编程技术网

Entity framework core Ef core创建数据库时无需迁移,即完全只需代码优先模型

Entity framework core Ef core创建数据库时无需迁移,即完全只需代码优先模型,entity-framework-core,ef-code-first,Entity Framework Core,Ef Code First,正常的工作流程是什么 我正试图转到ef core 3.1,但我似乎不太明白 正常的预期工作流程是什么 如果我使用的是IdentityDbContext,那么如何通过0次迁移生成数据库 每次更改模型时,是否需要创建迁移? 即使我想说,从零开始。 我对迁移不感兴趣,但似乎它必须存在,以便core能够使用模型创建数据库(代码优先) 下面的代码不是我正在使用的,而是我正在询问的。。。。即使我做了这些更改,它似乎是一个工作流程依赖(一个非常糟糕的依赖)/希望不是 // auto migration con

正常的工作流程是什么

我正试图转到ef core 3.1,但我似乎不太明白 正常的预期工作流程是什么

如果我使用的是IdentityDbContext,那么如何通过0次迁移生成数据库

每次更改模型时,是否需要创建迁移? 即使我想说,从零开始。 我对迁移不感兴趣,但似乎它必须存在,以便core能够使用模型创建数据库(代码优先)

下面的代码不是我正在使用的,而是我正在询问的。。。。即使我做了这些更改,它似乎是一个工作流程依赖(一个非常糟糕的依赖)/希望不是

// auto migration
context.Database.Migrate();
在没有迁移的情况下,它只会创建一个空数据库,如何让它创建基于模型的数据库,而不生成新的迁移/? 这是ef6中的默认行为,我不想在开发过程中维护迁移,我只想说它是否不同,告诉我,我将删除并重新创建

是否强制使用迁移?换句话说,每次更改数据库时,必须删除所有迁移,然后再次创建,因为MIN为1迁移,否则它甚至不考虑模型实体。 这就是Ef core 3.1,我认为它现在已经超越了这个限制

~startup.cs
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        // configure app

        SeedData.Initialize(app.ApplicationServices);
    }       

    // dbInitializer.cs
    public static class SeedData
    {
        public static void Initialize(IServiceProvider serviceProvider)
        {
            using (var serviceScope = serviceProvider.CreateScope())
            {
                var context = serviceScope.ServiceProvider.GetService<ApplicationDbContext>();

                // auto migration
                context.Database.Migrate();

                // Seed the database.
                InitializeUserAndRoles(context);
            }
        }

        private static void InitializeUserAndRoles(ApplicationDbContext context)
        {
            // init user and roles  
        }
    }
~startup.cs
公共无效配置(IApplicationBuilder应用程序,IHostingEnvironment环境)
{
//配置应用程序
初始化(app.ApplicationServices);
}       
//dbInitializer.cs
公共静态类种子数据
{
公共静态无效初始化(IServiceProvider服务提供程序)
{
使用(var serviceScope=serviceProvider.CreateScope())
{
var context=serviceScope.ServiceProvider.GetService();
//自动迁移
Migrate();
//为数据库添加种子。
初始化Euserandroles(上下文);
}
}
私有静态void初始化euserandroles(ApplicationDbContext上下文)
{
//初始化用户和角色
}
}

请参阅和文档链接。很快,EF Core中就没有“自动迁移”(也不会有)。谢谢,它不是真正的“自动”,它只是在不迁移的情况下生成它,。。。有一个区别,在ef6中它有两个概念。如果不退出模型,则自动创建,ef6中的“自动”是指,如果它看到更改并自动尝试应用,我不会尝试比较模型,我想要的是能够简单地说“删除”并再次创建,而不必每次都含蓄地说“创建新迁移”。我知道ef6中的“自动”是什么。关键是,在使用EF Core时,您应该忘记EF6。虽然有一些相似之处,但EF6和EF Core是完全不同的系统。在EF Core中(重新)创建不进行迁移的数据库的唯一方法是调用
EnsureDeleted
,然后调用
EnsureCreated
。但是,您将永远无法对该数据库使用迁移。所有这些都包含在文档链接中。@IvanStoev请理解我不是在试图比较,只是理解这是否是预期的工作流程,或者如果我缺少一些东西,因为它看起来完全是反向的,即使你想立即放弃它,也必须对每一个更改创建一个迁移。我想问的是,这是唯一有效的方法,还是我遗漏了什么,而不是指出一个人能做什么或不能做什么。“代码优先”似乎有些奇怪,但要生成代码来创建db,您不希望生成任何代码。它已经在ef core上进行了几次修改,并且认为会有一些东西。如果重新创建,会不会只是将其创建为空?你还需要迁移吗?。。。。