#c# #.net #entity-framework #inheritance #orm
#c# #.net #entity-framework #наследование #orm
Вопрос:
В моем контексте у меня есть две сущности, и сущность A наследуется от B, они сопоставляются с fluent API и работают некоторое время.
Но теперь мне нужно ее изменить, и когда базовый объект будет удален, мне нужно сохранить объект B в базе данных.
Возможно ли это на EF6? Поведение по умолчанию заключается в удалении записей из обеих таблиц.
Я думал изменить его с наследования на композицию, но предпочел бы просто изменить поведение удаления.
Заранее спасибо.
Комментарии:
1. Какой тип наследования вы применили? Таблица для каждого типа? B имеет свою собственную таблицу, а таблица A (которая предоставляет дополнительные свойства) ссылается на таблицу B, верно? И когда вы удаляете A, вы хотите сохранить строку в B, верно?
2. У меня есть две таблицы, одна для базового класса и одна для дочернего.
Ответ №1:
Это может работать до тех пор, пока A не является абстрактным. Если вы удаляете объекты, сопоставленные с TPT, EF отправляет две инструкции delete, одну для базовой и одну для унаследованной таблицы.
Вы можете использовать перехватчик команд, чтобы предотвратить выполнение базового удаления, или вы можете использовать сопоставления хранимых процедур для удаления.
Если A является абстрактным, вы можете наследовать удаленный класс и создать соответствующий объект в хранимой процедуре DeleteA.
Комментарии:
1. Спасибо, это действительно способ, которым я раньше не пользовался.