使用EF 4.1 Fluent Code First的每類型表繼承

entity-framework entity-framework-4 entity-framework-4.1 entity-framework-6 table-per-type

我有一組相當簡單的數據庫表,例如:

Vehicle
 Id
 RegNo

Car
 Id (FK of Vehicle.Id)
 OtherStuff

Bike
 Id (FK of Vehicle.Id)
 MoreStuff

我的類模型正如您所期望的那樣:Vehicle是一個抽像類,然後Car和Bike是它的子類。

我已經設置了我的EF4.1 Code First配置如下:

Vehicle
 Id
 RegNo

Car
 Id (FK of Vehicle.Id)
 OtherStuff

Bike
 Id (FK of Vehicle.Id)
 MoreStuff

但是當EF嘗試構​​建其模型配置時,我遇到了許多奇怪的例外。

目前它正在拋棄這個:

Vehicle
 Id
 RegNo

Car
 Id (FK of Vehicle.Id)
 OtherStuff

Bike
 Id (FK of Vehicle.Id)
 MoreStuff

它從哪裡獲取列名?它不在我的任何代碼或數據庫本身。它必須是一些接管控制的慣例。如何指示EF使用每個表格類型?

如果我從我的Vehicle類中刪除“abstract”關鍵字(我在線上的某個地方進行了一次完整性測試),那麼我會得到一個不同的異常,如下所示:

Vehicle
 Id
 RegNo

Car
 Id (FK of Vehicle.Id)
 OtherStuff

Bike
 Id (FK of Vehicle.Id)
 MoreStuff

我顯然做了一件非常錯的事,但是什麼呢?我已經關注了MSDN文檔以及我能找到的所有其他TPT + EF4.1文章!

熱門答案

當我遇到這個問題時,我發現我有一個未映射的子類。在此示例中,一些可能的原因是:

  1. 存在另一個子類,例如Bus 。這沒有映射。
  2. 其中一個子類(如Car )未映射。

在這種情況下,請確保映射每個子類:

  1. 確保子類存在映射,包括ToTable方法調用。
  2. 確保在OnModelCreating期間實際應用映射。
  3. 如果您在跟踪此問題時遇到問題,請嘗試使用調試器並在所有映射代碼中設置斷點。

或者,如果不應該首先映射子類,請確保使用Ignore方法調用之一Ignore




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因