【问题标题】:EF 4.4 Code First - Auto generation creating two instances of databaseEF 4.4 Code First - 自动生成创建两个数据库实例
【发布时间】:2013-02-14 06:53:47
【问题描述】:

我最近从 EF 4.3.1 升级到 4.4,开始发生一些奇怪的事情。自升级以来我已经接触过代码,所以我不能 100% 肯定地说是导致这个问题的原因。

无论如何,当我删除现有数据库并从 PM 控制台调用 Update-Database 时,它​​会创建一个数据库,但使用我的上下文的完全限定名称。即,MyProject.Data.MyContext。以前,它只是创建了一个名为 MyContext 的数据库。我可以初始化数据库中的一堆数据用于测试目的,但是当应用程序运行时,它说数据库中没有任何内容。

当我查看数据库时,我看到现在有另一个名为 MyContext 的数据库(就像过去一样)。当我在该数据库中初始化测试数据时,应用程序运行良好并能看到数据。

我正在重写 OnModelCreating 方法。基本上是这样的:

 protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {//My modelBuilder stuff.
base.OnModelCreating(modelBuilder);}

这种方法没有太大变化,所以我认为这不是罪魁祸首。有没有人遇到过这个问题?如果您希望我发布更多代码,请告诉我。

【问题讨论】:

    标签: ef-code-first entity-framework-5


    【解决方案1】:

    搜索您的代码以确保没有两个类正在实现 DbContext - 我在使用脚手架时遇到了这个问题。

    打开您的上下文,并尝试使用连接字符串显式设置它,例如:

        public myContext()
            : base("name=DefaultConnection")
        {
        }
    

    检查您的 web.config,看看您的 EF 设置和连接字符串是否有任何奇怪的地方。

    【讨论】:

    • 感谢您的建议。我尝试按照您的建议将连接字符串名称显式传递给 base,它说在配置文件中找不到具有该名称的连接字符串。我验证了配置文件中确实存在连接字符串,所以这是可疑的。此外,我的配置文件中 EF 的所有设置都被注释掉了,但它似乎并没有抱怨这一点。看起来很奇怪。
    • 你的回答帮助我深入了解,所以我将其标记为我的问题的答案。
    【解决方案2】:

    好的,事实证明我需要删除我的 app.config 文件,因为我使用的是 EF Code-First。 我开始使用数据库优先方法,但后来将其更改为 Code-First。一旦我删除了 app.config 文件,它就可以正常工作 - 只使用 update-database 命令创建一个数据库并在我的代码中使用相同的数据库。

    哦,我可以在上下文构造函数中设置我的数据库名称,如下所示:

    MyContext() : base("MyDatabase") { }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-30
      • 2011-06-17
      相关资源
      最近更新 更多