Entity framework EF代码是第一个现有数据库

Entity framework EF代码是第一个现有数据库,entity-framework,entity-framework-4.1,ef-code-first,Entity Framework,Entity Framework 4.1,Ef Code First,首先使用EF4.1代码,我想停止EF从模型创建数据库。据我所知,如果您传递Connectionstring名称,它将使用该连接字符串中的现有数据库。但是,如果数据库不存在,那么它将创建数据库,所有表将构成模型 <connectionStrings> <add name="DiaryContext" connectionString="Data Source=.;Initial Catalog=Diary;Integrated Security=SSPI;" provider

首先使用EF4.1代码,我想停止EF从模型创建数据库。据我所知,如果您传递Connectionstring名称,它将使用该连接字符串中的现有数据库。但是,如果数据库不存在,那么它将创建数据库,所有表将构成模型

  <connectionStrings>
<add name="DiaryContext" connectionString="Data Source=.;Initial Catalog=Diary;Integrated Security=SSPI;" providerName="System.Data.SqlClient"/>
在上述示例中,其行为如下所示:

(1) 如果数据库不存在,那么它将创建包含所有表等的数据库

(2) 如果数据库存在且没有表,则不会创建新表

(3) 如果我在EF代码中添加新模型,那么它将不会在数据库中创建新表

我对2和3很满意,但在(1)的情况下,如果数据库不存在,那么我希望它抛出异常,而不是创建数据库和表

在我的例子中,数据库是由DBA管理的,我不能完全控制它

有人知道如何做到这一点吗


非常感谢,

当您首先使用EF代码时,您需要设置一个DB初始值设定项,例如,在我的DataContext的构造函数中这样做

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<WebContext>());
Database.SetInitializer(新的DropCreateDatabaseIfModelChanges());

您可以使用一些默认实现,如DropCreateDatabaseIfModelChanges和DropCreateDatabaseAlways。但是,如果您不想生成任何数据库或表,请确保没有设置初始值设定项或从中继承初始值设定项,并且您可以对现有数据库使用该模型。古斯考特好

thx我想古斯考特的博客有答案。Database.SetInitializer(null);我还没试过,但我会告诉你这是否有效;)成功了。不错。更好的是,我可以实现如下所示的初始化逻辑:非常感谢您大声说出这一点。如果您没有设置任何初始值设定项,EF Code First将不会尝试修改现有的DB,而不会尝试任何迁移。无论如何,这些迁移都应该作为最佳实践显式应用,而不是在启动时应用。
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<WebContext>());