Нет, это не сработает.
Когда вы звоните:
detailModel.Entries.Add(entryDetailModel);
Это вызывает Getter для ваших записей, который делает это:
return _entries.Where(m => !m.Deleted).ToList();
_entries может быть установлен на новый List<Entry>
, однако, возвращая .Where(...).ToList()
, получатель вернет недавно инициализированный список , содержащий только не удаленные записи. Вы добавляете к этому временному списку результатов, а не _entries.
Если вы хотите, чтобы ваши получатели фильтровали только невыбранные строки, это нормально, но вы должны рассмотреть более подход DDD:
[NotMapped]
[JsonIgnore]
private IList<EntryDetailViewModel> _entries = new List<EntryDetailViewModel>();
[JsonIgnore]
public new IReadOnlyList<EntryDetailViewModel> Entries
{
get
{
return _entries.Where(m => !m.Deleted).ToList().AsReadOnly();
}
}
public void AddEntry(EntryDetailViewModel entry)
{
// TODO: Validate entry doesn't already exist, is complete/valid...
// then...
_entries.Add(entry);
}
Для наборов сбора полезно инициализировать их при создании, чтобы избежать необходимости в дополнительной дополнительной плите котла для проверки на нулевую или конструкторскую инициализацию. Затем получатель помечается как ReadOnlyList (или ReadOnlyCollection), который возвращает ваши отфильтрованные данные. Использование вариантов ReadOnly не требуется, но оно дает вашим будущим потребителям, по крайней мере, предупреждение о том, что «Эй, вы не должны пытаться изменить эту коллекцию». DDD включает предоставление подходящих методов добавления / обновления / удаления, чтобы регулировать, когда и как можно изменить состояние этого объекта. Для этой коллекции нет Setter, поэтому он не может быть перезаписан каким-то мошенническим кодом, добавленным позже. Это включает в себя планирование методов, которые будут служить действиями, регулирующими изменение состояния, а не полагаться на установщики.