我有一个SaveClientDataMethod将保存,并根据我的数据库首先我必须保存数据到地址和联系人表,而不是更新或添加客户端。所以这是我的问题,如何在这种情况下使用DbContext对象? Shoulld我在每个方法中创建上下文,或者只在root方法或Use context中创建类的私有属性?
public class TestClass
{
private void SaveClientDataMethod()
{
using (var context = new TestEntities)
{
NewRecord.FK_1 = TestMethod1(context);
NewRecord.FK_2 = TestMethod2(context);
context.TestTable.Add(NewRecord);
context.SaveChanges();
}
}
private int SaveAddress(TestEntities context)
{
context.SaveChanges(); /// Saving some data and returning id of new record
return id;
}
private int SaveContacts(TestEntities context)
{
context.SaveChanges(); /// Saving some data and returning id of new record
return id;
}
}
同样以这种方式,如果在TestMethod2中存在异常,则部分事务将保存到数据库并且违反UoW模式,如果我错了,请纠正我。
答案 0 :(得分:1)
答案是每单位工作应该有一个上下文。 DbContext
实际上是EF的UoW实现。调用SaveChanges()
将UoW提交到数据库。如果在更新数据时出现任何问题,只需不要调用SaveChanges()
,也不会对数据库进行任何更改。
这在实践中的意义取决于您使用EF的环境。我编写Web应用程序,因此通常每个请求都有一个DbContext
,因为通常请求是一个UoW。在其他环境中,情况可能会有所不同。