Обнаружение инициализации объектов POCO в Entity Framework

Допустим, у меня есть POCO со свойством как таковым.

public class Person
{
    private string _firstName;
    public string FirstName
    {
       get { return _firstName; }
       set
       {
           _firstName = value;
           // DO STUFF;
       }
    }
}

Когда объект инициализируется EF, я хочу, чтобы был установлен только _firstName и ничего больше, только после инициализации объекта я хочу, чтобы набор запускал остальные // DO STUFF;.


person user1601421    schedule 23.12.2014    source источник
comment
EF действительно не предназначен для этого. Это не невозможно, но почти всегда это больше работы, чем реструктуризация вашего другого кода, чтобы избежать необходимости в этом. Можете ли вы немного объяснить, чего вы надеетесь достичь, заставив FirstName вести себя по-разному в зависимости от того, когда он вызывается? Знание реальной проблемы может дать более легкий альтернативный подход.   -  person    schedule 23.12.2014
comment
Я думаю, что лучший вариант - создать VIEW в вашей базе данных с той же структурой вашего класса POCO и возвращать значение только для столбца FirstName и null для других столбцов. Читайте из VIEW вместо исходной таблицы.   -  person arvic.rivera    schedule 23.12.2014


Ответы (1)


Почему бы вам просто не

  1. Объявите установщик свойства как protected; а также
  2. Разоблачить свое // DO STUFF поведение как правильный метод SetFirstName(string firstName)?

Что-то вроде этого:

public class Person
{
    public string FirstName { get; protected set; }

    public string SetFirstName(string value)
    {
       _firstName = value;
       // DO STUFF;
    }
}

Гораздо чище, вообще не нужно «взламывать» EF.

person rsenna    schedule 23.12.2014
comment
Это не сработает, поскольку мои свойства привязаны к элементу управления формы Windows, но что будет работать, так это создание другого свойства для привязки элемента управления, к которому затем будет получено/установлено свойство EF. - person user1601421; 23.12.2014
comment
Хорошо, я понимаю вашу точку зрения. Я считаю, что ваш обходной путь, вероятно, сработает. Но на вашем месте я бы отделил объект, привязанный к элементу управления формой, от объекта EF, поскольку у них явно были бы разные обязанности (правила представления и постоянство БД). - person rsenna; 25.12.2014