2011-04-03 95 views
2

由於繼承,我在實體框架中遇到了一些問題。 所以,我有這樣的事情數據庫:實體框架繼承和持久列

PROFILE 
Id int identity [PK] 
ProfileTypeId int [FK] [PK] 

PROFILETYPE 
Id int [PK] 

COMPANY 
ProfileId int [FK] [PK] 
ProfileTypeId AS 1 PERSISTED [FK] [PK] 

PERSON 
ProfileId int [FK] [PK] 
ProfileTypeId AS 2 PERSISTED [FK] [PK] 

我要實現繼承,一個配置文件可以是一個公司或個人,它是唯一的,所以FK在公司簡檔和ProfileTypeId到的個人資料,它獨家。

但是當我嘗試在實體框架中創建一個公司時,它違反PROFILE中PROFINETYPE的PROFILE中的FK。可能是因爲在公司中ProfileTypeId是持久的,它沒有填充PROFILE中的值,有沒有人知道一種解決方法來使其與實體框架一起工作?

謝謝!

回答

0

有這個數據庫模式兩個非常大的問題:

  1. ProfileTypeId在派生表是因爲在父表ProfileTypeId的計算列將作爲計算列中也可以操作。 EF不允許主鍵中的計算列。即使它允許他們你的情況將無法正常工作。您將無法插入CompanyPerson,因爲EF永遠不會將計算列的值發送到數據庫。因此插入將會違反外鍵,因爲Profile將始終將ProfileTypeId設置爲空。
  2. EF不允許外鍵爲計算列。

結論:你不能在EF中映射它。

您必須刪除ProfileTypeId和ProfileType,因爲該信息對於EF是完全冗餘的,或者您可以嘗試在這些表的頂部構建一些視圖,並將該視圖映射爲按層次結構表(TPH)並使用存儲過程或instead of觸發器將數據插入到表中。

+0

我已經擺脫它,但期待一些解決方法回去;)謝謝! – TrymBeast 2011-04-03 22:17:47