如何使用实体框架在单个事务中更新子表和父表?

时间:2014-01-23 10:49:31

标签: c# entity-framework

您好我有下面指定的代码,它当前正在将新行插入子表并更新父表。

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

现在我希望在单个事务中更新父表和子表。如果任何人能帮助我,将会非常有帮助。

1 个答案:

答案 0 :(得分:0)

您将使用交易范围......

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();
    }
}