微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

EF Code First现有数据库

如何解决EF Code First现有数据库

| 首先使用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的好文章     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。