當我試圖從我的Bieren表中獲取數據時,我的代碼給了我一個EntityCommandExecutionException。EntityFramework使用錯誤的表名
異常消息說它找不到「dbo.Biers」,這很明顯,因爲它叫做「dbo.Bieren」。
我可以很容易地解決這個問題,只需重新命名數據庫中的表。儘管我不喜歡在我的代碼的錯誤周圍修復我的數據庫。
我如何使實體框架使用正確的表而不是改變我的表的名稱?
在此先感謝。
當我試圖從我的Bieren表中獲取數據時,我的代碼給了我一個EntityCommandExecutionException。EntityFramework使用錯誤的表名
異常消息說它找不到「dbo.Biers」,這很明顯,因爲它叫做「dbo.Bieren」。
我可以很容易地解決這個問題,只需重新命名數據庫中的表。儘管我不喜歡在我的代碼的錯誤周圍修復我的數據庫。
我如何使實體框架使用正確的表而不是改變我的表的名稱?
在此先感謝。
對於數據庫優先的方法,StriplingWarrior的解決方案效果很好。但是,如果使用代碼優先方法,則可以在目標實體類上使用System.ComponentModel.DataAnnotations.TableAttribute
將實體類映射到數據庫表。
但是,這種方式有點煩人,因爲我們通常想要定義一個純粹的實體類。要做到這一點,您可以將其委託給另一個班級,或者使用DbContext
類中重寫的OnModelCreating
方法,如下所示。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Category>()
.ToTable("MyCategories");
}
偉大的東西先生!非常感謝! –
您的實體框架模型有關於它連接到的表名和連接的信息。如果你使用的是數據庫優先的方法,你應該有一個EDMX文件和你的數據庫模型。最簡單的方法是從數據庫更新模型。
也可以挖到Biers類型的屬性,並手動更改表名稱。
感謝您的快速回復!但我沒有使用數據庫第一種方法。我在代碼中使用了一個變體,我將模型類與現有數據庫關聯起來。 (我是MVC3和EF4首發,從書中得到)。有沒有辦法解決這個代碼優先的方法? –
@ Wesz-T:看起來jwJung打敗了我。乾杯。 – StriplingWarrior
@StriplingWarrior喜歡脫衣舞,你碰巧知道我怎麼可以用一個僅用於關係(對於多對多)的表來做到這一點?它不會出現在edmx中作爲其他表格的可選對象 – Bassie
用TableAttribute
屬性來裝飾你的實體類,例如,
[Table("Bieren")]
是不是例外說dbo.Biers或dbo.Bierens? –
它說「dbo.Biers」 –