Есть ли способ узнать, когда объект инициализируется? - PullRequest
1 голос
/ 07 ноября 2010

Есть ли способ узнать, когда объект инициализируется? Было бы замечательно, если бы Entity Framework поддерживал интерфейс ISupportInitialize, но это не так.

По сути, я пытаюсь обновить свойство LastModified при обновлении определенного другого свойства. Однако функция OnXxxChanged вызывается всякий раз, когда устанавливается свойство, в том числе при инициализации объекта.

Ответы [ 2 ]

2 голосов
/ 08 ноября 2010

На самом деле они вызываются не в результате вашей "инициализации объекта", а из-за материализации объекта .Вы должны знать, что: События и методы PropertyChanged и PropertyChanging возникают во время материализации объекта .Причина в том, что эти 2 метода вызываются в теле установщика для этого свойства, а EF вызывает средства задания свойств каждый раз, когда материализует объект.

К сожалению, нет встроенного способа определить, находитесь ли вы в процессе материализации объектов или действительно изменили значение после Материализации.

Одним из обходных путей может быть установка логического поля в классе, для которого по умолчанию установлено значение true, а затем проверка его значения в событиях PropertyChanged / PropertyChanging и установка его в значение false на этапе материализации.Что-то вроде этого поможет:

partial class Product {

    bool _isMaterialized = true;

    partial void OnProductNameChanged() {
        if (_isMaterialized) {
            _isMaterialized = false;
            return;
        }
        this.ModifiedDate = DateTime.Now;
    }
}


Вы можете найти другой обходной путь по этой ссылке: Свойство, измененное во время ObjectMaterialization Где Мэтью Мезил предложил решение, которое читает трассировку стека.

1 голос
/ 08 ноября 2010

Вы можете использовать событие ObjectMaterialized ObjectContext

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