Entity Framework 4.1 - сначала кодРазве EF не переопределяет моих виртуальных участников? - PullRequest
0 голосов
/ 10 августа 2011

Я строю систему с использованием доменного дизайна и EF 4.1.В некоторых моих свойствах у меня есть логика, запрещающая устанавливать недопустимые значения и, если это так, выдает исключение.Я думал, что EF при создании экземпляров моих классов создал новый временный класс, например MyClass_abc123… наследующий от MyClass, который переопределяет все виртуальные члены, чтобы иметь возможность устанавливать их с данными из БД.Когда EF создает экземпляр класса ниже и пытается установить свойство MyObj, генерируется исключение.У кого-нибудь есть подсказка или хороший способ ее решить?

public class MyClass
{
    private MyObject _myObj;
    public virtual MyObject MyObj
    {
        get { return _myObj; }
        set
        {
            if (!check some logic...)
                throw new Exception();

            _myObj = value;
        }
    }
}

BR Philip

1 Ответ

3 голосов
/ 10 августа 2011

EF не отменяет вашу внутреннюю логику. EF только оборачивает это, и свойства обертки все еще вызывают базовый установщик и получатель.

Edit:

Не существует способа избежать этого. Просто вы привносите некоторую логику в свои сущности и несете за нее ответственность. Сеттер также вызывается при загрузке сущности из базы данных, потому что он должен устанавливать ваши свойства. Если вы не хотите, чтобы ваша логика выполнялась при загрузке сущности из базы данных, вы должны добавить некоторую другую логику, которая включит проверку после загрузки объекта. Чтобы включить проверку вы можете обработать:

var objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
objectContext.ObjectMaterialized += YourHandler

В обработчике ObjectMaterialzied вам нужно проверить тип материализованного объекта и преобразовать его в тип, выставляющий вашу функцию TurnOn, и просто вызвать его.

...