是否可以从 IQueryable 获取 EntityEntry<T><T>

问题描述 投票:0回答:1

我有一个方法有DbContext对象(它是由有DbContext对象的方法调用的)。虽然我可以将 DbContext 作为参数传递,但我试图避免这种情况,因为它在 23 个不同的地方被调用。另外,我更喜欢尽量减少传递的参数数量。

我确实有一个

IQueryable<T>
类型的对象和
T
类型的对象。有没有办法从这些对象中获得
EntityEntry<T>
?还是
IUpdateEntry<T>

在我看来,

IQueryable
应该有一个指向
DbContext
的指针。但我一直没找到。

c# .net entity-framework entity-framework-core
1个回答
0
投票

在我看来,

IQueryable
应该有一个指向
DbContext

的指针

不,不应该。

IQueryable
是非常通用的接口,它抽象了查询提供程序的动态查询分析(因此您可以从用户定义的代码生成 SQL)。它不仅可以被 EF 以外的不同查询提供程序使用,而且其中一些查询提供程序没有
DbContext
概念(并且与数据库引擎根本无关,例如,您可以通过文件系统实现自定义查询提供程序 - 参见这个博客)。

理论上,通过

IQueryable.Provider
是有可能实现的,但即使有可能,也需要做大量工作并深入研究 EF Core 内部结构。

如果您需要使用变更跟踪器,您需要传递允许它的抽象之一。比如

DbContext
DbSet
ChangeTracker
(也许还有一些我没想到的)。

© www.soinside.com 2019 - 2024. All rights reserved.