EF Code First现有数据库

dae*_*aai 3 entity-framework ef-code-first entity-framework-4.1

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

  <connectionStrings>
<add name="DiaryContext" connectionString="Data Source=.;Initial Catalog=Diary;Integrated Security=SSPI;" providerName="System.Data.SqlClient"/>
Run Code Online (Sandbox Code Playgroud)

        public MyDiaryContext() : 
        base("name=DiaryContext")
    {
        this.Configuration.LazyLoadingEnabled = true;
        this.Configuration.ProxyCreationEnabled = false;
    }
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,它的行为如下:

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

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

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

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

在我的情况下,数据库由DBA管理,我没有完全控制它.

有没有人知道如何实现这一目标?

非常感谢,

Ric*_*est 5

首先使用EF代码时,需要设置DB Initializer I,例如在我的DataContext的构造函数中执行此操作

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<WebContext>());
Run Code Online (Sandbox Code Playgroud)

您可以使用DropCreateDatabaseIfModelChanges和DropCreateDatabaseAlways等一些默认实现.但是,如果您不生成任何数据库或表,只需确保没有设置或继承初始化程序,您可以对现有数据库使用该模型.scot gu的好文章

  • 我觉得scott gu的博客有答案.Database.SetInitializer <制造>(空); 我没试过这个,但我知道这是否有效;) (2认同)