Я пишу код исправления для устаревшего ASP. NET приложения, которое использует Entity Framework 5. Я принимаю пользовательский ввод и обновляю свои сущности, используя новые данные.
Мои сущности не меняются много, но все же в настоящее время я беру все значения из пользовательского интерфейса и устанавливаю его для сущностей следующим образом:
myEntityUnit.MyEntityAddress.AddressLine1 = AddressLine1; //Update with potentially the same value
Это работает функционально, но я также вызываю большую часть трафика базы данных c, даже для не измененные свойства, так как EF запоминает эти обновления в своем трекере изменений. Свойство, описанное выше, на самом деле выглядит так:
[EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)]
[DataMemberAttribute()]
public global::System.String AddressLine1
{
get
{
return _AddressLine1;
}
set
{
OnAddressLine1Changing(value);
ReportPropertyChanging("AddressLine1");
_AddressLine1 = StructuralObject.SetValidValue(value, true, "AddressLine1");
ReportPropertyChanged("AddressLine1");
OnAddressLine1Changed();
}
}
Таким образом, при каждом обращении к установщику, даже с тем же значением, обнаруживается изменение.
Как лучше всего этого избежать, в некоторых (десятках) свойствах, только в некоторых объектах (слишком минимальные изменения исправлений)?
Я придумал несколько такие простые условия проверки, но это кажется неуклюжим и слишком многословным:
if (profilingEnterpriseUnit.ProfilingAddress.AddressLine1 != AddressLine1) {
profilingEnterpriseUnit.ProfilingAddress.AddressLine1 = AddressLine1;
}
Есть ли способ написать функцию, которая обновляет свойство через его установщик, только когда значение отличается, используя getter?
Примечание: я рассмотрел Передача свойств по ссылке в C#, но решение вообще не использует геттеры и все еще довольно многословно как в использование и код.