C # / Entity Framework: Как вызвать только сеттер, когда значение меняется? - PullRequest
0 голосов
/ 23 марта 2020

Я пишу код исправления для устаревшего 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#, но решение вообще не использует геттеры и все еще довольно многословно как в использование и код.

...