EF6 — Сохранение записи базового класса при удалении

#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. Спасибо, это действительно способ, которым я раньше не пользовался.