Это то, что я решил сделать ...
Используйте сгенерированные EF сущности и ассоциации (НЕ STEs - вы правы Ник), чтобы построить порядок. Всегда включайте иностранные ключи.
Установите для параметра MergeOption значение NO TRACKING, т. Е. Отключено.
Сохраняйте соответствующие объекты в сеансе между сообщениями / запросами страниц, пока пользователь формирует заказ.
Важно: при связывании дочерних сущностей (например, OrderLines) не связывайте существующие дочерние сущности через отношения, а используйте идентификатор FK. Поэтому не используйте OrderLine.Product = product, а используйте OrderLine.Product_Id = product.Id. Это устраняет проблемы, когда существует несколько сущностей в разных контекстах.
Когда заказ будет выполнен и готов к сохранению, добавьте в контекст и SaveChanges.
-
При редактировании существующего заказа ...
Установите для MergeOption значение NO TRACKING.
Сохранение соответствующих сущностей в SESSION между сообщениями / запросами страниц, пока пользователь редактирует заказ.
Я использую свой собственный индикатор состояния объекта, чтобы можно было записывать, добавляется, изменяется или удаляется объект при отсоединении.
Когда изменения завершены и готовы к сохранению, присоедините их к контексту, обработайте изменения (задайте для ObjectState значение MODIFIED и т. Д.) И SaveChanges.
-
Создает мечту - недолговечный контекст (UOW) - нет View Model или DTO (просто используйте классы Entity) - нет сложного кода (отсоединение / присоединение графиков и т. Д.).
Примечание: не сохраняется в VIEWSTATE. Нужно разобраться в этом, так как я захочу перейти с InProc на SQL. Буду обновлять.
Возможно, я что-то упустил, но я потратил МНОГО времени на поиски возможных решений для этого.