将DbContext引用传递给using语句中的另一种方法错误的做法?

时间:2017-11-17 15:01:03

标签: entity-framework-6

我有一个使用EF 6数据模型的方法,并且包含在using语句中。在Id中有一些额外的和常见的步骤需要完成,而不是在一个方法中包含它们。下面的代码,虽然不是我使用的确切代码,似乎工作。但是,我想知道是否有任何" gotchyas"我设置与处理DbContext本身的EF特定问题有关。特别是在如何将所有内容都转换为SQL?

主要目标是在调用SaveChanges之前对多个实体执行多个操作,以便隐式事务涵盖所有更改,而不是多次调用SaveChanges,为孤立更改保留选项。

AppendFlagToOrder(ref DbContext tx, ref CustOrder o) {
    var oSettings = (from a in tx.OrderSettings where a.Type == o.OrderType select a).FirstOrDefault();
    if(!oSettings == null) {
        o.IsFlagged = oSettings.Flagged
    }
}


CheckOrderFlag(int OrderId) {       

     using (var ctx = new StoreDbCtx()) {
        CustOrder co = (from a in ctx.Orders where a.Id == OrderId select a).FirstOrDefault();
        AppendFlagToOrder(ctx,co);

        //-- continue with other operations
    }   
}

1 个答案:

答案 0 :(得分:1)

您通常不希望像这样传递DbContext,因为任何人都可以在任何时候调用SaveChanges()。最简单的方法是创建一个只有你想要暴露的DbSets的IStoreDbCtx接口。然后将该类型发送到子方法,这样他们就无法访问您的SaveChanges()。