我有一个类似的问题。
我想在同一个事务范围内进行两次插入。这些对象是相关的,并且它们之间具有 FK 关系,但出于多种原因,我不想通过导航属性连接它们,而只能通过 ID 连接它们。
这是我想要完成的简化:
Order o = new Order();
OrderDetails d = new OrderDetails();
new Repository().SaveNew(o, d);
class Repository{
void SaveNew(Order o, OrderDetails d){
using (TransactionScope transaction = new TransactionScope())
{
_context.Connection.Open();
// order
_context.Orders.ApplyChanges(o);
_context.SaveChanges();
// details
d.OrderID = o.ID;
_context.OrderDetails.ApplyChanges(d);
_context.SaveChanges(); <--- UpdateException
_context.Connection.Close();
transaction.Complete();
}
}
}
问题是我得到一个 UpdateException 因为 FK 评估失败。我试图删除 FK 关系并运行完全相同的代码,它运行良好,并且两个对象都设置了正确的属性。那么为什么这种方法会失败呢?而这应该怎么做呢?同样,我不想通过它们的导航属性附加实体。
谢谢!