Entity framework 6 从using语句中将DbContext引用传递给另一个方法是错误的做法吗?

Entity framework 6 从using语句中将DbContext引用传递给另一个方法是错误的做法吗?,entity-framework-6,Entity Framework 6,我有一个使用EF 6数据模型的方法,它被包装在using语句中。还有一些附加的和常见的步骤需要完成,而不是将它们全部包含在一个方法中。下面的代码虽然不是我使用的确切代码,但似乎可以工作。不过,我想知道是否有任何gotchyas Im设置与处理DbContext本身的EF特定问题相关。特别是如何将所有内容转换为SQL 主要目标是在调用SaveChanges之前对多个实体执行多个操作,以便隐式事务覆盖所有更改,而不是多次调用SaveChanges,从而为孤立更改保留打开的选项 AppendFlagT

我有一个使用EF 6数据模型的方法,它被包装在using语句中。还有一些附加的和常见的步骤需要完成,而不是将它们全部包含在一个方法中。下面的代码虽然不是我使用的确切代码,但似乎可以工作。不过,我想知道是否有任何gotchyas Im设置与处理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
    }   
}

您通常不希望这样传递DbContext,因为任何人都可以随时调用SaveChanges。最简单的方法是创建一个IStoreDbCtx接口,该接口上只有您想要公开的数据库集。然后将该类型发送给子方法,使它们无法访问您的SaveChanges