2011-09-11 45 views
2

我有ThirdParty實體和兩個派生實體:供應商和客戶。
我叫工人另一個實體,與供應商的一員:在實體框架中使用派生類而不是抽象類型

沒有定義EntitySets:

public abstract class ThirdParty { } 
public class Supplier : ThirdParty { } 
public class Customer : ThirdParty { } 

public class Worker { 
    public virtual string Name {get;set;} 
    public virtual Supplier Supplier {get;set;} 
} 

當我使用實體框架,我得到以下異常從數據庫中獲取工作者對於指定的實體類型「CompanyData.Supplier」。如果'CompanyData.Supplier'是派生類型,則改爲使用基類型。

該錯誤告訴我爲供應商成員使用ThirdParty類型而不是供應商類型。但我希望供應商與供應商類型而不是ThirdParty。我怎樣才能解決這個問題?

+1

這種模式是不EF的問題。你究竟在做什麼查詢? 「*當我從數據庫中獲得Worker時* ...」不是特別精確。 – Slauma

+0

@尼爾芬維克:我不知道。 SpeedBirdNine的答案足夠好。 – Naor

回答

2

使用ThirdParty的引用(變量)來存儲屬於供應商和客戶(抽象類不能有實例但可以有引用)的成員。 ThirdParty的任何虛擬方法都將在供應商和客戶中實現,並且對於ThirdParty,供應商和客戶具有不同實現的任何方法,適當的方法將由於多態性而被調用。因此,從ThirdParty的引用中從DB接收它們不會導致任何問題。當然,如果方法不在ThirdParty中,但在供應商或客戶中,但仍然可以始終進行typcast,那麼會出現小問題。

希望這會有所幫助。

+0

我知道使用ThirdParty將會起作用。但我需要參考供應商而不是ThirdParty。我不想讓客戶參考。 – Naor

+0

您可以爲此運行時類型標識 – SpeedBirdNine

+0

使用is或typeof這個 – SpeedBirdNine

相關問題