将实体框架4.1 Code First应用程序移至生产需要进行哪些更改?

时间:2011-04-07 17:58:41

标签: entity-framework ef-code-first entity-framework-4.1

正如所讨论的in this thread,实体框架代码优先适用于开发环境。那么,需要对Entity Framework Code First应用程序进行哪些步骤或更改才能将其移至Production?

  1. 将数据库迁移到生产服务器。
  2. 更改Web.config中的连接字符串
  3. DbContext初始化需要进行哪些更改以防止它在生产环境中进行修改? (或者,由于迁移的数据库中的数据库模式是正确的,它是否会避免麻烦?)还有其他事情要做吗?

2 个答案:

答案 0 :(得分:5)

这是一篇关于代码优先方法的精彩文章,包括底部的生产部署:http://msdn.microsoft.com/en-us/magazine/hh126815.aspx

您可以使用Red Gate's SQL Compare之类的工具来分析开发环境和目标环境之间的差异,以构建允许DBA执行迁移的更改脚本。

您可能想要做的另一件事是将一个名为“AppVersion”的实体添加到您的代码优先上下文中。然后,覆盖DropCreateDatabaseIfModelChanges IDatabaseInitializer的Seed()方法,以便它使用连续构建编写当前应用程序版本或源控件修订版号。

示例:

public class OrderDbInitializer : DropCreateDatabaseIfModelChanges<OrderContext>
{
    protected override void Seed(OrderContext context)
    {

        context.AppVersion.Add(new AppVersion() {Version = Assembly.GetExecutingAssembly().GetName().Version.ToString()});
        context.SaveChanges();
    }


}

这样,您始终可以知道哪个版本的代码与数据库相关联。您还可以向Seed()方法添加更多代码,以创建开发人员在编写应用程序时需要使用的示例数据。

最后,您不希望在生产中使用DropCreateDatabaseIfModelChanges初始值设定项,因此需要使用config transform或某些Factory模式。

希望这有助于给你一些想法。

答案 1 :(得分:1)

首先没有特定于ef代码的真正技巧。使用从测试到生产的任何ORM,移动任何数据库都需要做同样的事情。

您上面的步骤似乎涵盖了95%的需要做的事情(如果我忘记了,我会留下5%的开放:))