如何以正确的方式在EF中使用DBContext

时间:2015-05-25 11:30:24

标签: entity-framework dbcontext

我有一个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模式,如果我错了,请纠正我。

1 个答案:

答案 0 :(得分:1)

答案是每单位工作应该有一个上下文。 DbContext实际上是EF的UoW实现。调用SaveChanges()将UoW提交到数据库。如果在更新数据时出现任何问题,只需不要调用SaveChanges(),也不会对数据库进行任何更改。

这在实践中的意义取决于您使用EF的环境。我编写Web应用程序,因此通常每个请求都有一个DbContext,因为通常请求是一个UoW。在其他环境中,情况可能会有所不同。