如何使用实体框架在单个交易中更新子和父表



嗨,我在下面指定了一个代码,目前将新行插入子表并更新父表。

var child= new Child();
child.Parent= parent;
DataContext.Parent.Add(parent); 
DataContext.Entry(parent).State = EntityState.Modified;

现在,我希望在一次交易中同时更新父母和子表。如果有人可以帮助我,这将非常有帮助。

您将使用交易范围...

using (TransactionScope scope = new TransactionScope())
{
    var child= new Child();
    child.Parent= parent;
    DataContext.Parent.Add(parent); 
    DataContext.Entry(parent).State = EntityState.Modified;
    DataContext.SaveChanges();
    scope.Complete();
}

我看不到您在代码片段中介绍您的数据上下文,但我会期望更多这样的东西。

using (var context = new MyContext())
{
    using (TransactionScope scope = new TransactionScope())
    {
        var child= new Child();
        child.Parent= parent;
        context.Parent.Add(parent); 
        context.Entry(parent).State = EntityState.Modified;
        context.SaveChanges();
        scope.Complete();
    }
}

这样做后,上下文被处置了。

编辑 - 当您想更新父级而不是添加父时。

您应该从数据库中检索父母,而不是添加它并将其更改给父母,但是在您的代码中没有对父母进行更改,因此当然不会对父母进行更新记录...如果父母已经存在,则不需要添加。

using (var context = new MyContext())
{
    using (TransactionScope scope = new TransactionScope())
    {
        var child= new Child();
        var parentRecord = context.Parent.Find(parent.Id);
        child.Parent= parentRecord; 
        context.SaveChanges();
        scope.Complete();
    }
}

最新更新