EF6 -> EFCore ExecuteSqlCommand 等效项

Fel*_*tor 3 c# entity-framework oracle11g entity-framework-6 entity-framework-core

我正在努力将我们的模型转移到 EF Core,但我无法找到调用以下代码的方法:

InitializeTime = context.ExecuteSqlCommand<DateTime>("SELECT CURRENT_TIMESTAMP FROM DUAL").FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

我们使用数据库时间来同步所有内容,但据我所知,在 DbSet 之外调用原始 sql 不可用,并且返回类型仅限于类型DbSet参数。

我环顾四周,发现有一些DbQuery对象(文章),但这似乎只是为了获取当前系统日期时间而进行的繁重工作。

还有其他人遇到过这个问题并找到了更简单的解决方案吗?

注意:这是一个桌面应用程序,因此代码将在客户端运行,并且系统日期时间不可靠。

rgv*_*lee 6

EFCore 同名context.Database.ExecuteSqlRaw(sql)/ context.Database.ExecuteSqlRInterpolated(sql)(或者context.Database.ExecuteSqlCommand(sql)在 EFCore 3 之前,您没有指定您正在使用的版本)只能返回int,即执行 sql 语句影响的行数。

context.Query<TQuery>()据我所知,如果您想使用 EFCore 执行查询,您可以选择(直到 EFCore 3,从 EFCore 3 开始已弃用)或由普通 POCO 支持的无密钥实体(EFCore 3 开始)。

无密钥实体类型doco:

使用场景

无密钥实体类型的一些主要使用场景是:

用作原始 SQL 查询的返回类型。

就开销而言,当您考虑 EFCore 实现的工作单元/存储库模式时,实际上并不是这样。它本质上迫使您实现一个存储库,而不是在该地方进行临时查询。