2012-04-02 79 views
1

所以我有一個名爲聯繫的EF4類,即具有基本字段,如ID,姓名,姓氏等得到繼承的對象從EF4類

現在我想創建另一個2類稱爲SelectedUser和LoggedUser基本上從Contact類繼承,但他們有其他方法。

所以我創建了一個名爲SelectedContact類,如下所示: -

public partial class SelectedContact : Contact 
{ 

    methods.......... 
} 

我有一個問題,雖然,比如我想中檢索一個SelectedContact。所以基本上我在做什麼是

Contact contact = db.Contacts.FirstOrDefault(u => u.id_contact == contactId); 
SelectedContact selContact = (SelectedContact)contact; 

這不起作用,告訴我,我不能從聯繫人轉換爲SelectedContact。

我也試過

Contact contact = db.Contacts.FirstOrDefault(u => u.id_contact == contactId); 
SelectedContact selContact = contact as SelectedContact; 

但這返回一個空selContact。

我知道我可以通過一個移動的領域之一,即: -

SelectedContact selContact = new SelectedContact(); 
selContact.id_contact = contact.id_contact; 

但是我相信有一種更好的方式來做到這一點。

任何幫助非常感謝!

非常感謝您的幫助和時間。

回答

1

由於不是SelectedContact,因此不能將從數據庫檢索到的實例轉換爲SelectedContact。它只是Contact而且不創建新實例就不能投射(你將不得不覆蓋投射運算符)。

原因是你的實體模型不包含你的派生類,因爲每次你查詢數據庫,你只得到Contact實例。爲了支持你的場景,你將不得不映射你的派生類,但它有多個缺點。例如,您不能更改聯繫人的類型。

+0

感謝您的回覆拉迪斯拉夫,所以基本上我必須手動移動值?就像我目前正在做的那樣 – Johann 2012-04-02 08:51:59

+0

是的,因爲繼承不是您的問題的好設計方法。決定是否選擇聯繫不應該被建模爲繼承,而是作爲一個屬性。 – 2012-04-02 09:13:12

+0

好的,謝謝你的幫助拉迪斯拉夫 – Johann 2012-04-02 09:17:26