首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >您能在EF5中创建一个没有迁移的数据库吗?

您能在EF5中创建一个没有迁移的数据库吗?
EN

Stack Overflow用户
提问于 2013-11-28 00:03:51
回答 1查看 2.9K关注 0票数 1

我遵循官方的asp.net“使用MVC 4开始使用EF 5”。在本教程中,数据库是在执行迁移时创建的(据我理解)。当我使用Mvc 5教程查看EF 5时,他们没有使用迁移来创建数据库。他们使用数据库初始化器。所以,我想知道是否可以在不使用EF 5迁移的情况下为您的项目创建一个数据库?而且,这两种方法有什么区别呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-28 00:47:37

代码第一迁移和使用Package控制台命令进行升级一开始可能会有些混乱。您可以将初始化器用于CreateDatabaseIfNotExistsDropCreateIfModelChangesDropCreateDatabaseAlwaysMigrateDatabaseToLatestVersion

参见接口IDatabaseInitializer<TContext>.

代码语言:javascript
复制
CreateDatabaseIfNotExists   // is the Default initializer.

所以这就是为什么EF有时会为你做一些事情。

所以答案是“是你可以”创建一个没有迁移的数据库“

但两者之间的差别并不明显,如果你愿意这么做的话,那么长期来看则是另一个问题。如果您正在使用迁移。它将更新Db以匹配代码优先模型。如果没有数据库,那就意味着创建数据库。所以这就是为什么自动迁移和CreateDB看起来很混乱,因为它们有时会导致相同的结果。但从技术上讲,它们是不同的。

因此,通常只使用代码第一次自动“迁移”就足够了。

迁移可以是自动的,也可以是“管理的”。托管迁移方法调用生成代码,调整代码并运行PM命令或POwershell命令来实际执行迁移。

使用自动迁移,您只需要设置初始化程序并访问DBContext。

这个过程有两个部分。

( a) DB启动程序步骤。在实例化YourDBContext之前立即这样做。

代码语言:javascript
复制
 //eg
 // DONT TOUCH MY DB or i break your back!
 Database.SetInitializer(new ContextInitializerNone<YourDbContext>());  // Do Nothing, 
 // OR 
// yes migrate my db to match my code please.  
Database.SetInitializer(new MigrateDatabaseToLatestVersion<YourDbContext, YourMigrationConfiguration>());  // Set to migration is requested, see config class below

在使用迁移初始化器时指定的Confirguration类如下所示

代码语言:javascript
复制
public class YourMigrationConfiguration<TContext> : DbMigrationsConfiguration<TContext> 
    where TContext  : DbContext{

    protected  YourMigrationConfiguration() {
        AutomaticMigrationsEnabled = true;  // run it when needed. Do not wait for my PM Command
        AutomaticMigrationDataLossAllowed = true; // if the new db look  means dropping tables or columns go ahead and kill my data. So use this option with caution.

    }

然后,只需在需要时在代码中触发迁移。

代码语言:javascript
复制
    Context.Database.Initialize(true);    // i place this inside a method on my UoW class

代码优先的Db初始化策略。

代码第一迁移推荐阅读

管理迁移

网上有很多关于这个话题的文章。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20255489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档