2012-04-02 80 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