Entity framework core Ef core创建数据库时无需迁移,即完全只需代码优先模型
正常的工作流程是什么 我正试图转到ef core 3.1,但我似乎不太明白 正常的预期工作流程是什么 如果我使用的是IdentityDbContext,那么如何通过0次迁移生成数据库 每次更改模型时,是否需要创建迁移? 即使我想说,从零开始。 我对迁移不感兴趣,但似乎它必须存在,以便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
// 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上进行了几次修改,并且认为会有一些东西。如果重新创建,会不会只是将其创建为空?你还需要迁移吗?。。。。