Предположим, у меня есть 2 класса в модели: Пользователь (сопоставлен с таблицей USERS) и PrivilegedUser (наследует пользователя, дополнительная информация хранится в таблице PRIVILEGEDUSERS).Entity Framework: Наследование, изменение типа объекта
Теперь у меня есть строка в USERS (и экземпляр пользователя) и вам необходимо преобразовать этого пользователя в PrivilegedUser (т. Е. Создать запись в PRIVILEGEDUSERS с тем же идентификатором). Есть ли способ сделать это без удаления/вставки?
Проблема в том, что у вас нет представления PRIVILEGEDUSERS в модели, поэтому вы не можете создать только часть PrivilegedUser.
Это был всего лишь пример. Привилегированный пользователь может иметь скидку или личный менеджер или что-то еще дополнительно для обычных пользовательских свойств. В то же время существуют другие таблицы, которые должны ссылаться на пользователей независимо от конкретного типа пользователя. Я реализовал его с использованием режима наследования типа «на каждый тип». На уровне базы данных очень просто конвертировать пользователей из одного типа в другой (вам просто нужно вставить или удалить запись из таблицы расширений). Но в EF у вас есть только UserSet, который хранит объекты User и PrivilegedUser. Вот почему я спрашиваю, можно ли заменить существующий объект User с PrivilegedUser, сохраняющим существующий идентификатор и не удаляя запись из таблицы USERS.
Это правильно. Экземпляр должен/не может изменять тип. Итак, что происходит, когда пользователь становится привилегированным или непривилегированным? –
@Craig, любые новости? Я столкнулся с тем же вопросом. – Shimmy
@ Шимми, "новости?" Какие новости? Если вы думаете, что ваш объект должен изменить тип, вы, вероятно, злоупотребляете наследованием. @ Ответ DanDan по-прежнему является лучшей идеей. –