如何使用实体框架在一个事务中将数据保存到多个表中?
我有多个void方法,我填充上下文,但我想将它保存在一个事务中而不是多次保存。这样做的最佳方式是什么?
namespace DataAccess.Services
{
public class Submissions
{
DataContext Context;
public Submissions()
{
Context = new DataContext();
}
public void InsertAllData()
{
//Save all data at once for all below contexts
//DataContext.SaveChanges();
}
void InsertObject1(int Object1Id )
{
var obj1 = new DataAccess.Entity.Object1();
obj1.Field1 = ....
obj1.Field2 = ....
.....
DataContext.Objects.Add(obj1);
}
void InsertObject2(int Object2Id )
{
var obj2 = new DataAccess.Entity.Object2();
obj2.Field1 = ....
obj2.Field2 = ....
.....
DataContext.Objects.Add(obj2);
}
void InsertObject3(int Object3Id )
{
var obj3 = new DataAccess.Entity.Object3();
obj3.Field1 = ....
obj3.Field2 = ....
.....
DataContext.Objects.Add(obj3);
}
}
}
答案 0 :(得分:4)
您的示例代码看起来很好
实体框架是一个更改跟踪器,可跟踪所有更改。您在上下文中对对象所做的每个更改都将由本地上下文存储,当您调用DataContext.SaveChanges();
时,所有更改都将立即提交。
因此,在这种情况下,如果您按顺序调用InsertObject1
,然后InsertObject2
和InsertObject3
,然后DataContext.SaveChanges();
,则所有内容都将一次性存储。
如果你的意思是如何在SQL数据库事务中完成所有这些操作,你可以在这里阅读有关如何使用它们的信息:http://msdn.microsoft.com/en-us/data/dn456843