我有以下數據庫模式:映射導航屬性
我使用表每次Hiearchy(TPH)的繼承。 「案例」表的「類型」字段確定案例是電子郵件案例還是嘰嘰喳喳案例。它們都是與Cases表的1:N關係。
我使用數據庫先用EF辦法,這就是我要使用的模型:
的問題是,我無法使用外鍵導航屬性映射到子表, (Email.CaseId < - > Cases.Id和Tweets.CaseId < - > Cases.Id)。我想要實現的是EmailCase實體具有導航屬性來發送電子郵件,而TwitterCase實體具有一個Tweets。
我可以使它工作,只有當我手動添加關聯,然後導航,但當然這不會反映在數據庫中。
我該如何解決這個問題?我應該使用Table-per-Type(TPT)而不是TPH嗎?但在這種情況下,例如EmailCase只會包含一個ID到原來的情況,沒有別的,這聽起來很奇怪。 (這是如果我使用模型第一種方法會產生什麼)。
或者我應該手動添加關聯和導航屬性?
感謝您的好回答。我有多種服務來收集各種來源的數據。所有這些服務和Web應用程序(ASP。NET MVC)使用EF與數據庫進行交互。服務從源中獲取數據後,將其插入到數據庫中,並從中創建一個案例。基於你的回答,我想我會堅持TPH(這意味着據我所知手動添加關聯和導航到繼承的entites)。 – norbip
@norbip:是的,我認爲,一旦涉及繼承,您必須手動調整從數據庫創建的模型。即使對於TPT:如果數據庫中的EmailCases和TwitterCases表具有對'Cases'表的FK約束,DB-First可能會在它們之間創建三個具有導航屬性的實體,而不是層次結構。數據庫不理解繼承是什麼。 – Slauma