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

我有一个IQueryable<T>的对象和一个T类型的对象.有没有办法从这些物体中得到EntityEntry<T>分?或者是IUpdateEntry<T>

在我看来,IQueryable应该在某个地方/以某种方式指向DbContext.但我一直没能找到它.

推荐答案

在我看来,IQueryable应该有指向DbContext的指针

不应该是这样的.IQueryable是一个非常通用的接口,它对查询提供程序的动态查询分析进行了抽象(因此您可以从用户定义的代码生成SQL).它可以被不同的查询提供程序使用,不仅是EF,而且它们中的一些没有DbContext的概念(并且根本与数据库引擎无关,例如,您可以在FileSystem-see this blog上实现您的定制查询提供程序).

从理论上讲,IQueryable.Provider是有可能的,但即使可能,也需要做很多工作,并深入研究EF Core的内部 struct .

如果您需要使用变更跟踪器,则需要传递一个允许它的抽象.比如DbContextDbSetChangeTracker(可能还有其他一些我没有想到的).

Csharp相关问答推荐

在C# 11之前, struct 中的每个字段都必须显式分配?不能繁殖

为什么.Equals(SS,StringComparison. ClientCultureIgnoreCase)在Net 4.8和6.0之间不同?

Unity如何在PlayerPrefs中保存数据?

将委托传递到serviceccollection c#web API

如何阻止注释被包含在C#release build. exe中

如何使用C#Interop EXCEL创建度量衡

C#方法从AJAX调用接收NULL

C#中浮点数的System.Text.Json序列化问题

使用带有参数和曲面的注入失败(&Q;)

RX操作员使用先前值进行扫描,信号来自值本身

Postgres ENUM类型在第一次运行时对Dapper不可见

当try 测试具有协变返回类型的抽象属性时,类似功能引发System.ArgumentException

JsonPath在Newtonsoft.Json';S实现中的赋值

这是否比决定是否使用ConfigureAWait(False)更好?

如何设置WinForms按钮焦点,使其看起来像是被Tab键插入其中?

数据库操作预计影响1行,但实际影响0行; after _dbContext.SaveChanges();

Cmd中的&ping.end()";有时会失败,而";ping";总是有效

如何在.NET8中使用Blazor Web App(WebAssembly)托管服务器端控制器?

在C#中删除多个不同名称的会话

SendInput无法在C#中正确模拟键盘