首先使用EF 4.1代码我想停止EF从模型创建数据库。据我所知,如果你传递Connectionstring名称,它将使用该连接字符串中的现有数据库。但是,如果数据库不存在,那么它将创建数据库,将所有表格组成模型。
<connectionStrings>
<add name="DiaryContext" connectionString="Data Source=.;Initial Catalog=Diary;Integrated Security=SSPI;" providerName="System.Data.SqlClient"/>
public MyDiaryContext() :
base("name=DiaryContext")
{
this.Configuration.LazyLoadingEnabled = true;
this.Configuration.ProxyCreationEnabled = false;
}
在上面的示例中,其行为如下:
(1)如果数据库不存在,那么它将创建包含所有表等的数据库。
(2)如果数据库存在且没有表,那么它将不会创建新表
(3)如果我在EF代码中添加新模型,那么它就不会在数据库中创建新表。
我对2和3很满意但是在(1)的情况下如果数据库不存在那么我希望它抛出异常而不是创建数据库和表。
在我的情况下,数据库由DBA管理,我没有完全控制它。
有没有人知道如何实现这个目标?
非常感谢,
答案 0 :(得分:5)
首先使用EF代码时,需要设置DB Initializer I,例如在我的DataContext的构造函数中执行此操作
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<WebContext>());
您可以使用DropCreateDatabaseIfModelChanges和DropCreateDatabaseAlways之类的默认实现。但是,如果您不生成任何数据库或表,只需确保没有设置或继承初始化程序,您可以对现有数据库使用该模型。好的article由scot gu