我有一个方法不有DbContext对象(它是由有DbContext对象的方法调用的)。虽然我可以将 DbContext 作为参数传递,但我试图避免这种情况,因为它在 23 个不同的地方被调用。另外,我更喜欢尽量减少传递的参数数量。
我确实有一个
IQueryable<T>
类型的对象和 T
类型的对象。有没有办法从这些对象中获得 EntityEntry<T>
?还是IUpdateEntry<T>
?
在我看来,
IQueryable
应该有一个指向DbContext
的指针。但我一直没找到。
在我看来,
应该有一个指向IQueryable
的指针DbContext
不,不应该。
IQueryable
是非常通用的接口,它抽象了查询提供程序的动态查询分析(因此您可以从用户定义的代码生成 SQL)。它不仅可以被 EF 以外的不同查询提供程序使用,而且其中一些查询提供程序没有 DbContext
概念(并且与数据库引擎根本无关,例如,您可以通过文件系统实现自定义查询提供程序 - 参见这个博客)。
IQueryable.Provider
是有可能实现的,但即使有可能,也需要做大量工作并深入研究 EF Core 内部结构。
如果您需要使用变更跟踪器,您需要传递允许它的抽象之一。比如
DbContext
、DbSet
或ChangeTracker
(也许还有一些我没想到的)。