4

我正在開發一個EF5 Code First應用程序,並且到目前爲止事情一直進展順利,但我遇到了一些困難,而且我很希望有人可以提出解決方案。實體框架5:使用具體基類的Table-per-Type映射

基本上,我有一個基類和一些派生類,我想知道如何處理它們的映射。這裏是一個可笑的簡單例子:

[Table("Person")] 
public class Person 
{ 
    public int PersonId { get; set; } 
    public string Name { get; set; } 
} 

[Table("EmployeePerson")] 
public class EmployeePerson : Person 
{ 
    public int HoursWorked { get; set; } 
} 

[Table("CustomerPerson")] 
public class CustomerPerson : Person 
{ 
    public int DollarsSpent { get; set; } 
} 

到目前爲止,這是一個典型的表,每個類型的場景,除了順利基類是抽象 - 它可能有一個Person是誰不是EmployeePersonCustomerPerson。我在EF中接受這個問題時遇到了一些麻煩,並且當我試圖通過ID加載這樣的實體時,由EF生成的醜陋查詢不返回任何行。

有沒有人實施過這樣的事情? TPT風格的映射是否總是要求基類是抽象的?我沒有找到任何相反的例子,但也沒有真正的確認。如果必須的話,我可以考慮一些醜陋的解決方法,但如果有的話我更喜歡更優雅的解決方案。

(一更順利。我正在對第三方數據庫,所以我不能對架構進行任何更改)

謝謝!

回答

3

如果您的「醜陋」解決方案是引入抽象基類PersonBase(或類似)並且使Person爲空的派生類,我的評論是:做吧!它根本不是醜陋的,因爲它留下了改變Person而不影響其他派生類的空間。目前,這將更加困難。之後你必須介紹抽象類,這是對現有代碼的更大改變。

關於您的問題:我無法用EF 5(VS 2012 .Net 4.5)重新制作。也許有更多的事情發生在你的真實模型中。

+0

你是對的,我運行的簡化測試顯然不夠簡化 - 一個完全微不足道的例子按我希望的方式工作。現在要找出我在別處做什麼導致這...感謝您的幫助! – 2013-04-11 19:45:48