entity-framework - 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,而且在使用和代码方面仍然非常冗长。
解决方案
推荐阅读
- typescript - 在打字稿中,我不明白为什么会收到错误“Service1 | 服务2 | null' 不可分配给类型 '(Service1 & Service2) | 无效的'
- ruby-on-rails - Rails 6 表单不显示错误 - nil:NilClass 的未定义方法“错误”
- python - Pandas 根据另一列的条件重置 cumsum()
- python - 使用python查找两个符号之间的字符而无需重新
- google-apps-script - 从一个 Google 表格单元格中提取多个链接,然后使用 Google Apps 脚本将它们作为超链接粘贴到 Google 文档中
- logic - 如何在形式系统中证明¬(2|9)?
- python - Python3 firebase 存储 SDK 无法上传到模拟器
- python - 去除多列的基线
- ansible - Ansible 使用 lineinfile 包含带有变量问题的单引号
- java - Selenium4:“类型 WebDriver.TargetLocator 的方法 newWindow(WindowType) 未定义”