首页 > 解决方案 > C#/Entity Framework:当值改变时,如何只调用setter?

问题描述

我正在为使用 Entity Framework 5 的旧版 ASP.NET 应用程序编写错误修复代码。我正在接受用户输入并使用新数据更新我的实体。

我的实体没有太大变化,但我目前仍然从 UI 中获取所有值并将其设置在实体上,如下所示:

myEntityUnit.MyEntityAddress.AddressLine1 = AddressLine1; //Update with potentially the same value

这在功能上有效,但我也会导致大量数据库流量,即使对于未更改的属性也是如此,因为 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# 中通过引用传递属性,但解决方案根本不使用 getter,而且在使用和代码方面仍然非常冗长。

标签: entity-frameworkfunctionpropertiesentity-framework-5setter

解决方案


推荐阅读