2012-02-20 78 views
6

我創建了新項目,併爲其添加了最新的實體框架(版本4.3)。我在之前的EF版本中創建了類和上下文。但是,如果要創建數據庫的第一個運行期間(在我的情況下,它是SQL Server 2005中),我收到以下錯誤:實體框架4.3不創建數據庫

An error occurred while executing the command definition. See the inner exception for details.

用下面的內部異常:

Invalid object name 'dbo.__MigrationHistory'.

據我所知,該表適用於遷移,但如果沒有數據庫,則此表不存在。難道我做錯了什麼?

更多信息: 出於測試目的,我只創建一個類:

public class Test 
{ 
    [Key] 
    public int TestId { get; set;} 

    public string Name {get; set;} 
} 

public class Context : DbContext 
{ 
    public Context() : base("MyConnection") 
    { 
    } 

    public DbSet<Test> Tests { get; set;} 
} 

更新1

一些測試後,我意識到,應用程序從Visual Studio中拋出未處理的異常,並在視覺突破工作室。例外是System.Data.EntityCommandExecutionException。一旦我忽略了這種期望並且沒有停止代碼執行,就創建了數據庫。

更新2

使用數據庫的另一個幾個小時後,我發現,與啓用的遷移選項,並更新數據庫打從控制檯也就是解決這個問題。它在應用程序啓動之前創建數據庫,並且不會在Visual Studio中中斷。

+0

看上去就像是失去同步 http://stackoverflow.com/questions/3986160/an-error-occurred-while-executing-the-command-definition-see-the-inner-exceptio – 2012-02-20 16:51:51

+0

有你手動創建類?或者您已經使用了嚮導 – 2012-02-20 17:27:23

+0

對於測試,我只創建了一個名爲Test的TestDef,名稱爲[Key],字符串屬性名爲name。沒有別的。 – Marcin 2012-02-20 17:45:33

回答

3

你可以嘗試移除你的構造函數,使EF使用它的默認連接字符串。

public Context() : base("MyConnection") 
{ 
} 

如果做不到這一點,你能嘗試更新從Package Manager控制檯你的數據庫,看看你得到任何進一步的信息。

Update-Database -Verbose 

可能無關的,你的情況,但我用MvcMiniProfiler 1.9時,得到同樣的錯誤。如果你正在使用它太,確保EF分析被註釋掉線時截止:

//MiniProfilerEF.Initialize(); 

內MiniProfiler App_Start。


對於遇到類似問題的其他人,我發現從包管理器控制檯重新啓用遷移可以在某些情況下提供幫助。 在執行此操作之前,請確保您有一份遷移配置。

Enable-Migrations -Force 
+0

如果只有某些方面可以做出陳述「在做這件事之前確保您有一份移植配置的副本」。突出的更多:)所有的'Configuration.cs'東西都被這樣擦掉:) – 2013-07-20 04:22:02

2

...,只是多加一個可能的答案都面臨着類似的問題,這些
(注:這是一個開放式的故事似乎,因爲與遷移是很明顯的一些錯誤仍然部分)... 此鏈接來到最接近我需要什麼
Error when running Update-Database with EF 4.3 所以,你需要做三件事情(按順序 - 我指的是現有的項目):
(均在PM控制檯)

  • 確保PM控制檯中的「默認項目」已設置爲您所需的項目(即適用於更大的解決方案) - 這不一定與您的啓動項目相匹配! (和密切關注PM的意見/響應,以行動是否是你想要的項目取得)
  • (1)Enable-Migrations -force
  • (2)Add-Migration Initial
  • (3)Update-Database -Verbose

...如果你仍然得到PM控制檯異常

  • (4),那麼你可能需要「移動」您的項目到根

聽起來很愚蠢我知道,但那是我的主要問題 - 我有一堆解決方案文件夾,上述任何一個都會在解決方案文件夾中的項目上失敗。但是,一旦我感動的項目去根,一切正常(沒有更多的例外,有或W/O爲CLR第一次機會異常開啓或關閉)...
希望這有助於有人

編輯:如果您的數據模型項目(EF CF)是一個庫 - 然後將該項目設置爲PM控制檯中的「默認項目」,並直接在該項目上運行以上所有內容(並在該庫中創建遷移配置等本身)。否則它會失敗(並且當你的模型是一個lib時,也不會出現MigrationHistory異常 - 並且沒有爲它定義它,並且你在'主項目'中定義了遷移)。

編輯:你需要將lib(EF模型)和'startup'項目(調用它)移到根中。