请注意,“脏标志方法”(以其简单形式)适用于值类型(int、bool、...)和字符串,但不适用于引用类型。例如,如果一个属性是List<int>
or类型Address
,你可以让它“脏”而不调用 setter 方法(myCust.Address.City = "..."
只调用 getter 方法)。
如果是这种情况,您可能会发现基于反射的方法很有用(将以下方法添加到您的 BO):
public bool IsDirty(object other)
{
if (other == null || this.GetType() != other.GetType())
throw new ArgumentException("other");
foreach (PropertyInfo pi in this.GetType().GetProperties())
{
if (pi.GetValue(this, null) != pi.GetValue(other, null))
return true;
}
return false;
}
你可以像这样使用它:
Customer customer = new Customer();
// ... set all properties
if (customer.IsDirty(CustomerController.GetCustomerInformation(id)))
CustomerController.Save(customer);