получение унаследованного объекта из класса EF4 - PullRequest
1 голос
/ 02 апреля 2012

Итак, у меня есть класс EF4 с именем Contact, который имеет базовые поля, такие как ID, Имя, Фамилия и т. Д.

Теперь я хочу создать еще 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;

Это не работает, сообщая, что я не могу привести из Контакта в ВыбранныйКонтакт.

Я тоже пытался

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 Ответ

1 голос
/ 02 апреля 2012

Вы не можете привести экземпляр, извлеченный из базы данных, к SelectedContact, поскольку это не SelectedContact. Это всего лишь Contact, и приведение невозможно без создания нового экземпляра (вам придется переопределить оператор приведения).

Причина в том, что ваша модель Entity не содержит ваших производных классов, и поэтому каждый раз, когда вы запрашиваете базу данных, вы получаете только Contact экземпляр. Для поддержки вашего сценария вам также потребуется отобразить ваши производные классы, но у него есть несколько недостатков. Например, вы не можете изменить тип контакта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...