【发布时间】:2018-11-07 21:49:52
【问题描述】:
我有一个 IQueryable 扩展方法:
public static void SomeExt<T>(this IQueryable<T> query, DbContext context) {...}
我想知道是否有某种方法可以从查询中获取 DbContext,以便可以删除 DbContext 参数,只留下:
public static void SomeExt<T>(this IQueryable<T> query) {...}
我尝试过这样的事情 Access DataContext behind IQueryable 但它不起作用,得到零字段。
还有办法从 DbSet
Can you get the DbContext from a DbSet?
myDbSet.GetService().Context;
但这不是我需要的。我想从 Query 中获取它?
这是查询:
var q = context.Items.Where(a => a.StatusId = 1);
q.SomeExt(context);
vs
q.SomeExt();
【问题讨论】:
-
这不适用于任何 IQueryable 实现,因此我们必须依赖底层类型。
query.GetType().FullName的值对于您要在其上使用的 IQueryable 是什么? -
对于这种查询类型的全名(
是“项目”),我得到:“Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[[EFCore.MyExtensions.Tests.Item, EFCore.MyExtensions.Tests,版本=1.0.0.0,文化=中性,PublicKeyToken=null]]" -
这是一件很奇怪的事情,也许你可以解释一下为什么需要这个?
-
对于 BatchDelete 作为查询的扩展。
-
您遇到了与我目前面临的完全相同的问题!那么您最终是否决定将上下文作为参数传递,或者以下解决方案之一是否适合您?我不想将上下文与 IQueryable 捆绑在一起,但我也不太热衷于每次更新 EFCore 时都会中断的解决方案......
标签: entity-framework-core asp.net-core-2.0 dbcontext