实体框架4代码优先 - 防止数据库丢弃/创建

时间:2011-05-25 22:44:49

标签: sql-server-2008 entity-framework-4 ef-code-first

我使用Code First范例编写了一个ASP.Net MVC 3应用程序,当我对模型进行更改时,Entity Framework会自动尝试通过DROP和CREATE语句重新创建基础SQL Server数据库。问题是应用程序托管在第三方远程服务器上,这限制了我可以拥有的数据库的数量,并且似乎不允许我以编程方式执行“CREATE DATABASE ...”语句,因为我收集此错误消息:

  

在数据库'master'中拒绝CREATE DATABASE权限。

有没有办法阻止实体框架删除并尝试重新创建整个数据库,而只是简单地删除表并重新创建它们?

手动创建数据库并运行应用程序后,我也会收到以下错误,因为实体框架尝试修改数据库:

  

无法检查模型兼容性,因为数据库不包含模型元数据。确保已将IncludeMetadataConvention添加到DbModelBuilder约定。

2 个答案:

答案 0 :(得分:11)

更新:通过谷歌发现这个宝石,听起来就像你需要的那样:http://nuget.org/Tags/IDatabaseInitializer

您可以使用其他数据库初始化程序。假设您的上下文被称为SampleContext,那么您的构造函数将如下所示:

    public SampleContext() 
    {
        System.Data.Entity.Database.SetInitializer(new CreateDatabaseIfNotExists<SampleContext>()); 
    }

请注意,以上是默认的初始化程序。您可能需要通过实施IDatabaseInitializer来创建自己的自定义初始值设定项。这里有一些很好的信息:http://sankarsan.wordpress.com/2010/10/14/entity-framework-ctp-4-0-database-initialization/

答案 1 :(得分:1)

将EF 4.3与迁移一起使用时,您不会出现这种情况 - 至少我没有看到它。但是我的代码中也有这个设置 -

public sealed class DbConfiguration : DbMigrationsConfiguration<DatabaseContext>
{
    public DbConfiguration()
    {
        AutomaticMigrationsEnabled = false;
    }
}