实体框架4代码优先-防止DB删除/创建

问题描述

| 我已经使用Code First范例编写了一个ASP.Net MVC 3应用程序,据此,当我对模型进行更改时,实体框架会自动尝试通过DROP和CREATE语句重新创建基础sql Server数据库。问题是该应用程序托管在第三方远程服务器上,这限制了我可以拥有的数据库数量,并且在我从此错误消息中收集信息时,似乎不允许我以编程方式执行\“ CREATE DATABASE ... \”语句:   在数据库\'master \'中拒绝了CREATE DATABASE权限。 有没有什么方法可以阻止Entity Framework删除并尝试重新创建整个数据库,而是使其简单地删除表并重新创建它们? 在手动创建数据库并运行应用程序之后,我也遇到以下错误,因为实体框架尝试修改数据库:   由于数据库不包含模型元数据,因此无法检查模型兼容性。确保已将IncludeMetadataConvention添加到DbModelBuilder约定中。     

解决方法

更新:通过Google找到了这颗宝石,听起来确实正是您所需要的:http://nuget.org/Tags/IDatabaseInitializer 您可以使用其他数据库初始化程序。假设您的上下文称为“ 0”,那么您的构造函数将如下所示:
    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/     ,将EF 4.3与Migrations结合使用时,您不会获得此行为-至少我没有看到它。但是我的代码中也有此设置-
public sealed class DbConfiguration : DbMigrationsConfiguration<DatabaseContext>
{
    public DbConfiguration()
    {
        AutomaticMigrationsEnabled = false;
    }
}
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...