2013-02-14 124 views
1

我最近从EF 4.3.1升级到4.4,并且发生了一些奇怪的事情。自从升级以来,我已经触及代码,所以我不能100%肯定地说是造成这个问题的原因。EF 4.4代码优先 - 自动生成创建数据库的两个实例

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

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

我重写了OnModelCreating方法。基本上看起来像这样:

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

这种方法没有太大的改变,所以我不认为这是罪魁祸首。有没有人遇到过这个问题?让我知道你是否希望我发布更多我的代码。

回答

1

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

打开你的背景,并尝试用明确连接字符串设置它,如:

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

检查你的web.config,看看是否有任何怪异与EF设置和连接字符串。

+0

感谢您的建议。我试图显式地将连接字符串名称传递给base,就像你建议的那样,并且它表示在配置文件中找不到具有该名称的连接字符串。我证实连接字符串确实存在于配置文件中,因此是可疑的。此外,我的配置文件中的EF的所有设置都被注释掉了,但它似乎没有抱怨这一点。似乎很奇怪。 – lintmouse 2013-02-24 15:47:24

+0

你的回答帮助我了解了它的底部,所以我将它标记为我的问题的答案。 – lintmouse 2013-02-24 16:07:23

1

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

哦,我能在上下文构造设置我的数据库名称如下:

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