структура сущности 4.1 частичная инициализация класса - PullRequest
3 голосов
/ 21 августа 2011

Во-первых, в базе данных Entity Framework 4.1 имеется конструктор в сгенерированном классе c #, так где я могу выполнить частичную пользовательскую инициализацию класса?

Ответы [ 2 ]

7 голосов
/ 21 августа 2011

Насколько я понимаю, в вашем проекте есть файл, подобный Model.edmx, который фактически не генерирует никакого кода.Затем у вас есть Model.tt, который EF 4.1 фактически использует для генерации кода.И вы можете изменить этот Model.tt.Итак, если вы хотите добавить вызов частичного метода OnInitialized() для каждой из сгенерированных сущностей, которая вызывается из их конструкторов, найдите конструктор в коде Model.tt (его первая строка должна выглядеть примерно так: public <#=code.Escape(entity)#>()), добавьте вызов к OnInitialized() где-нибудь в конструкторе и объявите частичный метод:

partial void OnInitialized();

Восстановите сущности, используя Run Custom Tool, и все готово.Теперь вы можете сделать что-то подобное в своем не сгенерированном коде:

partial class SomeEntity
{
    partial void OnInitialized()
    {
        // custom initialization code goes here
    }
}

Я не знаю EF 4.1, поэтому возможно, что есть лучший способ.

0 голосов
/ 22 апреля 2013
  1. Добавить базовый класс:

     public class CallBase
     {
            protected CallBase()
            {
                Initialize();
            }
    
            protected abstract void Initialize();
     }
    
  2. Добавить частичную реализацию класса в другой файл

     public partial class Call: CallBase
     {
        protected owerride void Initialize();
        {
       ...
         }
     }
    

Недостатком является то, что метод инициализации будет вызываться перед всем существом коллекции.

...