На самом деле они вызываются не в результате вашей "инициализации объекта", а из-за материализации объекта .Вы должны знать, что: События и методы 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 Где Мэтью Мезил предложил решение, которое читает трассировку стека.