问题描述
|
首先使用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)的情况下,如果数据库不存在,那么我希望它引发异常,而不是创建db和表。
就我而言,数据库是由DBA管理的,我对此没有完全控制权。
有谁知道如何实现这一目标?
非常感谢,
解决方法
首先使用EF代码时,您需要设置一个数据库初始化程序,例如,在我的DataContext的构造函数中进行设置
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<WebContext>());
您可以使用一些默认的实现,例如DropCreateDatabaseIfModelChanges和DropCreateDatabaseAlways。但是,如果您不会生成任何数据库或表,则只需确保未设置或继承自Initializer,就可以对现有数据库使用该模型。 Scot Gu的好文章