У меня есть сервисный уровень, возвращающий коллекцию сущностей:
/// <summary>
/// Returns list of all existing accounts.
/// </summary>
IList<Account> GetAllAccounts();
Это вызывается на уровне пользовательского интерфейса, чтобы получить коллекцию IList и связать ее с пользовательским интерфейсом через IBindingList:
public BindingList<Account> Accounts
{
get;
private set;
}
public void LoadAccounts()
{
var service = IoC.Resolve<IAccountService>();
Accounts = new BindingList<Account>(service.GetAllAccounts());
}
Затем пользовательский интерфейс изменяет коллекцию IBindingList (добавление, удаление и редактирование сущностей), поэтому в какой-то момент (перед сохранением) у нас есть коллекция, которая редактировала, удаляла и новые сущности. Как я могу сохранить эту коллекцию таким образом, чтобы избежать ненужных обновлений (не обновлять сущности, которые не были изменены). Когда я делаю следующее, оператор ВСТАВИТЬ / Обновить / Удалить запускается для ВСЕХ элементов в коллекции:
в интерфейсе пользователя:
<code>
public void Save()
{
var accountService = IoC.Resolve();
accountService.Update(Accounts);
}
на уровне обслуживания:
public void Update(IList<Account> accounts)
{
if (accounts == null || accounts.Count == 0)
return;
using (UnitOfWork.Start())
using (var session = UnitOfWork.CurrentSession)
using (var tx = session.BeginTransaction())
{
foreach (var acc in accounts)
{
if (acc.AccountId == 0)
{
session.Save(acc);
}
else
{
session.Update(acc);
}
}
tx.Commit();
}
}
Обратите внимание, что сущностями являются некоторые классы POCO. Есть ли какой-нибудь способ узнать, есть ли в коллекции изменения, или простой способ определить, является ли объект грязным (вроде HasChanges или IsDirty).