Vb.net 如何使用实体框架同时更新/插入?
如何使用实体框架更新现有客户对象、插入新的计算机对象和添加新的工作订单Vb.net 如何使用实体框架同时更新/插入?,vb.net,entity-framework,Vb.net,Entity Framework,如何使用实体框架更新现有客户对象、插入新的计算机对象和添加新的工作订单 Using trans As New System.Transactions.TransactionScope() Using dcLAIT As LAITEntities = New LAITEntities -- Update Customer (Apply existing Customer) vWorkOr
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
调用SaveChanges()时,应执行上下文中所有挂起的更改。但是,在数据库生成唯一ID的情况下,在插入两个新的相关实体时,您可能必须将插入和更新拆分为单独的调用。您必须单独附加
客户
,并在将其连接到添加的工单之前设置其状态:
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
在内部使用事务,因此除非您想要强制序列化隔离级别,或者您要在该范围内调用多个SaveChanges
,TransactionScope
是冗余的。客户和计算机对象都具有数据库生成的标识,在插入的情况下,代码可以工作,但如果我想更新一个对象,代码就不能工作。