从EF4类获取继承的对象

时间:2012-04-02 08:36:41

标签: asp.net c#-4.0 inheritance entity-framework-4

所以我有一个名为Contact的EF4类,它有基本字段,如ID,Name,Surname等。

现在我想创建另外两个名为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;

这不起作用,告诉我无法从Contact转换为SelectedContact。

我也试过

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

但这会返回一个null selContact。

我知道我可以逐个移动字段,即: -

SelectedContact selContact = new SelectedContact();
selContact.id_contact = contact.id_contact;
但是我确信有更好的方法可以做到这一点。

非常感谢任何帮助!

非常感谢你的帮助和时间。

1 个答案:

答案 0 :(得分:1)

您无法将从数据库检索到的实例强制转换为SelectedContact,因为它不是SelectedContact。只有Contact并且在没有创建新实例的情况下无法进行强制转换(您必须覆盖强制转换运算符)。

原因是您的Entity模型不包含派生类,因此每次查询数据库时,您只获得Contact个实例。为了支持您的场景,您还必须映射派生类,但它有多个缺点。例如,您无法更改联系人的类型。