的頂這個問題將在3類進行解釋:帳戶,IndividualAccount,並醫生:實體框架TPH上TPT
- 前兩類是抽象
- IndividualAccount是Account的子類
- Doctor is IndividualAccount's subclass
第一層繼承(帳戶和IndividualAccount之間)正在使用表類型方法實施。 繼承的第二層(IndividualAccount和Doctor之間)正在植入表每個層次方法。
的流利的API配置爲如下:
class AccountConfiguration : EntityTypeConfiguration<Account>
public AccountConfiguration()
{
HasKey(x => x.Id);
...
}
}
class IndividualAccountConfiguration : EntityTypeConfiguration<IndividualAccount>
{
public IndividualAccountConfiguration()
{
ToTable("IndividualAccounts");
...
}
}
class DoctorConfiguration : EntityTypeConfiguration<Doctor>
{
public DoctorConfiguration()
{
...
}
}
我們從這個配置有什麼期望是有兩個表:第一個存儲ID和公共屬性對所有用戶(如用戶名和密碼)第二個存儲所有個人共有的屬性(例如姓名和電話號碼)。此外,第二個表格將有一個區分器,用於區分醫生和我們可能在我們的域中存在的其他類型的個人。
當我試圖通過它的身份證獲得醫生時出現問題。一個會拋出異常,聲稱大量列是無效的,其中最重要的一條是:
無效的列名「鑑」 \ r \ n
令我驚訝,如果我把表(」 IndividualAccounts「)]上面的IndividualAccount類定義,問題將得到解決。但是我已經在配置中設置了表名(Fluent API)。除了Fluent API之外,爲什麼還要使用註解?
更新
在註釋的存在,醫生的屬性放置在IndividualAccounts表這的確是我們所期望的。但是,如果我刪除註釋,將會創建一個新遷移,嘗試將這些字段移動到基表帳戶!
感謝您的回覆。關於沒有按照我的意願配置的表格,我再次檢查了它們,並確實如上所述配置了它們,即IndividualAccounts表格確實包含Discriminator列,並且整個應用程序都可以正常工作。 關於更簡單的設計,我們考慮了很多替代方案,而且這個更適合我們的要求。 – mdoust
@mdoust發佈請你的類和你的DbContext和你的完整DbConfigurations,缺少一些東西。我已經創建了實體exaclty作爲你的描述,但是由於我的Discriminator列丟失了!? –