2011-08-29 5 views
1

기존 고객 개체를 업데이트하는 방법, 새 컴퓨터 개체 삽입 및 엔터티 프레임 워크를 사용하여 새 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

당신은 당신이 추가 WorkOrder에 연결하기 전에 별도로 Customer을 연결하고 그 상태를 설정해야합니다

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 

을 Btw는. SaveChanges은 트랜잭션을 내부적으로 사용하기 때문에 직렬화 된 격리 수준을 강제로 지정하거나 TransactionScope이 중복되는 경우 SaveChanges을 여러 번 호출해야합니다.

0

SaveChanges()를 호출 할 때 컨텍스트의 모든 보류 변경 사항이 실행되어야합니다. 그러나 데이터베이스에서 고유 한 ID를 생성하는 경우 두 개의 새로운 관련 엔터티를 삽입 할 때 삽입 및 업데이트를 별도의 호출로 분할해야 할 수 있습니다.

+0

고객 및 컴퓨터 개체 모두 데이터베이스에서 생성 된 신원을 가지고 있습니다. 삽입 한 경우 코드는 작동하지만 작동하지 않습니다. 개체 중 하나를 업데이트하려는 경우. – arlen

관련 문제