Entity Framework Database first Как изменить сущности, чтобы сделать их производными от базового класса

У меня есть база данных, уже заполненная таблицами с данными в них. Я видел, что все таблицы имеют 5 общих столбцов:

  • Id-длинный, ключ
  • IsDeleted, бит
  • Датаудаледед, малая дата и время
  • LastUpdated, SmallDatetime
  • LastUpdatedUser, nvarchar

Теперь есть некоторые общие операции, которые выполняются на основе этих полей, которые в настоящее время реплицируются повсюду.

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

Я не нуждаюсь и не хочу иметь этот базовый объект в базе данных как таковой, это просто то, что я хочу помочь в части кодирования.

Проблема в том, что это прежде всего база данных, я не могу изменить базу данных, поэтому мне нужно работать только с классами POCO и EDMX.

Как я могу достичь этого?


person sergio    schedule 26.09.2013    source источник


Ответы (2)


То, что вы ищете, похоже на TPH (http://msdn.microsoft.com/en-us/data/jj618292.aspx)

Однако я не думаю, что это сработает для вас, поскольку у вас есть несколько существующих таблиц.

Одно из возможных решений:

  1. Создайте базовый класс под названием «BaseModel» (или что-то в этом роде)
  2. Добавьте эти свойства как абстрактные, чтобы принудительно переопределить их.
  3. Создайте метод в этом базовом классе для заполнения этих полей или создайте помощник, который принимает BaseModel, IsDeleted, LastUpdated, LastUpdatedUser в качестве параметра и обновляет модель.
  4. Расширьте частичные классы, сгенерированные файлом model.tt, и наследуйте от класса BaseModel.

Спасибо, Дэйв

person TheDaveJay    schedule 26.09.2013
comment
я думаю, что это решение найдется, но у меня около 200 таблиц. Можно ли добавить это через шаблон? я действительно не хочу делать это 200+ раз вручную - person sergio; 26.09.2013
comment
Привет, я хотел сказать, что вы можете просто добавить его в шаблон T4 :) - person TheDaveJay; 26.09.2013
comment
Привет @sergio. Я бегу к той же проблеме. Не могли бы вы посоветовать, как изменить шаблон T4, чтобы сгенерированные классы наследовали базовый класс? - person Khoait; 17.06.2016

  1. Разверните файл .edmx и откройте файл Model.tt (не файл Model.Context.tt)
  2. Найдите строку, в которой объявляется определение «частичного класса».
  3. Должно выглядеть примерно так: ‹#=codeStringGenerator.EntityClassOpening(entity)#>
  4. Добавьте наследование ": YourBaseClass" в конец строки

Сделанный. Как только вы сохраните модель, у вас будут все ваши старые объекты, производные от базового класса, и когда новый будет сгенерирован этим шаблоном, он также будет производным от базового класса.

person Kalin Krastev    schedule 24.02.2017