[英]Run entity framework core raw SQL without entity
我有这个 mysql 存储过程:
CREATE DEFINER=`admin`@`%` PROCEDURE `Counter_increment2`(IN _Id VARCHAR(80), IN _CounterType VARCHAR(10), IN IncrBy INT)
BEGIN
UPDATE Counter SET Value = @counter := Value + IncrBy WHERE Id=_Id AND CounterType=_CounterType;
SELECT @counter as Value;
END
我想通过 EF 将第一行中的第一个单元格读入 C# 变量。
我知道过去 EF 为这种使用提供了SqlQuery<type>
方法。
怎么做才对?
我认为这基本上是对这里回答的问题的重复:
尽管我承认那是 EF Core 2.something,但使用其中的最佳答案对我有帮助。 假设您使用的是 3.x,可能需要对其进行调整。
注意:对于您在此处列出的特定情况(在单行上返回单个 int 列),我创建了自己的扩展方法,如下所示:
public static class RDFacadeExtensions
{
public static async Task<int> ExecuteScalarQueryAsync(this DatabaseFacade databaseFacade, string sql, params object[] parameters)
{
var concurrencyDetector = databaseFacade
.GetService<IConcurrencyDetector>();
using (concurrencyDetector.EnterCriticalSection())
{
var rawSqlCommand = databaseFacade
.GetService<IRawSqlCommandBuilder>()
.Build(sql, parameters);
var result = await rawSqlCommand
.RelationalCommand
.ExecuteScalarAsync(
databaseFacade.GetService<IRelationalConnection>(),
parameterValues: rawSqlCommand.ParameterValues);
return (int)result;
}
}
}
然后,您应该可以简单地调用:
int result = Context.Database.ExecuteScalarQueryAsync("exec procedure...");
要使用...
(警告:这种形式未经测试,已经在家里躲了一段时间,所以也有点生疏)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.