2013-02-14 109 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") { }