Как обновлять / вставлять одновременно используя сущность фреймворка? - PullRequest
1 голос
/ 29 августа 2011

Как обновить существующий объект Customer, вставить новый объект Computer и добавить новый WorkOrder с помощью каркаса сущностей?

  Using trans As New System.Transactions.TransactionScope()
       Using dcLAIT As LAITEntities = New LAITEntities
                       -- Update Customer (Apply existing Customer)    
                    vWorkOrder.Customer = vCustomer
                       -- Insert Computer 
                    vWorkOrder.Computer = vComputer

                       -- Insert WorkOrder
                    dcLAIT.WorkOrder.AddObject(vWorkOrder)
                    dcLAIT.SaveChanges()
                    trans.Complete()
         End Using
   End Using

Ответы [ 2 ]

2 голосов
/ 30 августа 2011

Вы должны прикрепить Customer отдельно и установить его состояние, прежде чем подключить его к добавленному WorkOrder:

Using trans As New System.Transactions.TransactionScope()
   Using dcLAIT As LAITEntities = New LAITEntities
                   -- Insert Computer 
                vWorkOrder.Computer = vComputer

                   -- Insert WorkOrder
                dcLAIT.WorkOrder.AddObject(vWorkOrder)

                dcLAIT.Customer.Attach(vCustomer)
                   -- Update Customer (Apply existing Customer)    
                dcLAIT.ObjectStateManager.ChangeObjectState(vCustomer, EntityState.Modified)
                vWorkOrder.Customer = vCustomer
                dcLAIT.SaveChanges()
                trans.Complete()
     End Using
 End Using

Кстати.SaveChanges использует транзакцию для внутреннего использования, поэтому, если вы не хотите принудительно установить уровень изоляции Serialized или не собираетесь вызывать несколько SaveChanges в этой области, TransactionScope является избыточным.

0 голосов
/ 29 августа 2011

Все ожидающие изменения в контексте должны выполняться при вызове SaveChanges (). Однако в случаях, когда уникальные идентификаторы создаются базой данных, вам может потребоваться разделить вставки и обновления на отдельные вызовы при вставке двух новых связанных сущностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...