EF 4.4 Code First - 自动生成创建两个数据库实例

时间:2013-02-14 06:53:48

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

我最近从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);}

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

2 个答案:

答案 0 :(得分:1)

搜索你的代码以确保没有两个类正在实现DbContext - 我在使用scaffolding时遇到过这种情况。

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

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

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

答案 1 :(得分:1)

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

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

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