DbContext没有价值

时间:2017-11-30 15:19:21

标签: c# entity-framework

我想使用@Thanh Nguyen的解决方案来自这个问题:How do I delete multiple rows in Entity Framework (without foreach)

他的解决方案是这种方法:

public static void DeleteWhere<T>(this DbContext db, Expression<Func<T, bool>> filter) where T : class
        {
            var query = db.Set<T>().Where(filter);

            string selectSql = query.ToString();
            string deleteSql = "DELETE [Extent1] " + selectSql.Substring(selectSql.IndexOf("FROM"));

            var internalQuery = query.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance).Where(field => field.Name == "_internalQuery").Select(field => field.GetValue(query)).First();
            var objectQuery = internalQuery.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance).Where(field => field.Name == "_objectQuery").Select(field => field.GetValue(internalQuery)).First() as ObjectQuery;
            var parameters = objectQuery.Parameters.Select(p => new SqlParameter(p.Name, p.Value)).ToArray();

            db.Database.ExecuteSqlCommand(deleteSql, parameters);
        }

您可以看到第一个参数是DbContext类型。在我的项目中,我首先使用EF 6,数据库,但我的上下文类扩展自ObjectContext,而不是DbContext。因此,作为使用DeleteWhere扩展方法的解决方法,我想从我的对象上下文中获取db上下文,所以我尝试了这个:

using (var db = new MyEntities(connectionString))
{
        db.TransactionHandler.DbContext.DeleteWhere(myClause);
}

这有效:

using (var db = new MyEntities(connectionString))
{
        db.MyTable.DeleteObject(myObject);
}

但DbContext为null。

我做错了什么?

0 个答案:

没有答案