Библиотека CSLA может помочь в этой ситуации.
Однако, если вы хотите самостоятельно реализовать:
У вас есть главный объект, главный объект содержит список дочерних объектов.
Форма сведений может редактировать дочерний объект напрямую. Поскольку все являются ссылочными типами, главный объект автоматически обновляется.
Проблема в том, что главный объект грязный, поэтому его следует сохранить в вашей базе данных или еще чем-то подобном.
CSLA обрабатывает это с помощью свойства IsDirty (). В главном объекте вы будете запрашивать каждый дочерний объект, чтобы определить, не является ли он грязным, и, если это так, сохранить все (а также отслеживать, является ли сам главный объект грязным)
Вы также можете обработать это интерфейс INotifyPropertyChanged.
Что касается некоторых других ваших вопросов:
Вы хотите отделить свою логику. Сущность может управлять хранением своих собственных свойств и правил целостности для себя, но логика взаимодействия различных объектов друг с другом должна быть отдельной. Посмотрите на такие шаблоны, как MVC или MVP.
В этом случае создание нового дочернего объекта должно быть либо в главном объекте, либо в отдельном объекте бизнес-логики, который создает дочерний объект и затем добавляет его к родительскому объекту.
Для идентификаторов использование GUID в качестве идентификатора может спасти вас от множества проблем, потому что тогда вам не нужно обращаться к базе данных, чтобы определить правильный идентификатор. Вы можете оставить флаг на объекте, если он новый или нет (и поэтому должен быть вставлен или обновлен).
Опять же, CSLA обрабатывает все это для вас, но имеет довольно много накладных расходов.
относительно отмены при отмене: CSLA реализовал отмену n-уровня, но если вы пытаетесь сделать это вручную, я бы либо использовал вашу функцию CopyFrom, либо обновлял данные объекта со слоя персистентности при отмене (повторный выбор ).