2011-06-18 44 views
9

當我試圖從我的Bieren表中獲取數據時,我的代碼給了我一個EntityCommandExecutionException。EntityFramework使用錯誤的表名

異常消息說它找不到「dbo.Biers」,這很明顯,因爲它叫做「dbo.Bieren」。

我可以很容易地解決這個問題,只需重新命名數據庫中的表。儘管我不喜歡在我的代碼的錯誤周圍修復我的數據庫。

我如何使實體框架使用正確的表而不是改變我的表的名稱?

在此先感謝。

+0

是不是例外說dbo.Biers或dbo.Bierens? –

+0

它說「dbo.Biers」 –

回答

8

對於數據庫優先的方法,StriplingWarrior的解決方案效果很好。但是,如果使用代碼優先方法,則可以在目標實體類上使用System.ComponentModel.DataAnnotations.TableAttribute將實體類映射到數據庫表。

但是,這種方式有點煩人,因爲我們通常想要定義一個純粹的實體類。要做到這一點,您可以將其委託給另一個班級,或者使用DbContext類中重寫的OnModelCreating方法,如下所示。

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Category>() 
     .ToTable("MyCategories"); 
    } 
+1

偉大的東西先生!非常感謝! –

5

您的實體框架模型有關於它連接到的表名和連接的信息。如果你使用的是數據庫優先的方法,你應該有一個EDMX文件和你的數據庫模型。最簡單的方法是從數據庫更新模型。

  1. 打開Visual Studio中的EDMX文件
  2. 刪除不正確的「瘋長,荊棘」表中的背景
  3. 單擊鼠標右鍵,單擊「從數據庫更新模式」
  4. 點嚮導在你的數據庫,並選擇「Bieren」表中添加
  5. 完成嚮導,而「Bieren」表應該出現

也可以挖到Biers類型的屬性,並手動更改表名稱。

+0

感謝您的快速回復!但我沒有使用數據庫第一種方法。我在代碼中使用了一個變體,我將模型類與現有數據庫關聯起來。 (我是MVC3和EF4首發,從書中得到)。有沒有辦法解決這個代碼優先的方法? –

+0

@ Wesz-T:看起來jwJung打敗了我。乾杯。 – StriplingWarrior

+0

@StriplingWarrior喜歡脫衣舞,你碰巧知道我怎麼可以用一個僅用於關係(對於多對多)的表來做到這一點?它不會出現在edmx中作爲其他表格的可選對象 – Bassie

7

TableAttribute屬性來裝飾你的實體類,例如,

[Table("Bieren")]