У меня есть класс Invoice, в котором есть InvoiceRows.
public class Invoice
{
[Key]
public int? Id { get; set; }
public DateTime InvoiceDate {
get => invoiceDate;
set => PropertySet<DateTime>(value, ref invoiceDate);
}
private DateTime invoiceDate;
public List<InvoiceRow> Rows { get; } = new List<InvoiceRow>();
[NotMapped]
public bool IsEdited { get; set; } = false;
public void PropertySet<T>(T value, ref T field)
{
if (value.Equals(field)) return;
field = value;
IsEdited = true;
}
}
Счет-фактура редактируется в графическом интерфейсе WPF, который требует уведомлений о редактировании счета-фактуры, например, для активации кнопки сохранения.
(В первой реализации я думал, что IsEdited был предметом модели представления, и я исключил его из модели и вместо этого включил в модель представления. Оказывается довольно сложным при обработке подзаписей. Однако я еще не до конца осознал, какой вариант лучше использовать модель или реализацию модели представления, и это, возможно, второй вопрос.)
IsEdited легко управляется на уровне записей, но как с ним обращаться на уровне InvoiceRow?
Первая идея, которая приходит в голову, - это уведомить об этом главную record.
Это, в свою очередь, требует дополнительного кода для подключения уведомлений между Invoice и Rows.
Другая идея состоит в том, чтобы использовать состояние DbContext, которое хранит в одном месте требуемую информацию, а не собирать ее вокруг вложенных записей.
Остались ли другие варианты? Одна из проблем такого решения - полностью оценить последствия каждого подхода заранее. Каковы плюсы / минусы разных способов справиться с этим? В своем небольшом опыте работы с WPF я читал кое-что о наемных архивных моделях представления. Может быть, они подходят для этого, обрабатывая подведение итогов на уровне модели представления?