Обратите внимание, что «подход грязного флага» (в его простой форме) работает для типов значений (int, bool, ...) и строк, но не для ссылочных типов. Например. если свойство имеет тип List<int>
или 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);