C# 无法从实体框架核心运行存储过程

C# 无法从实体框架核心运行存储过程,c#,stored-procedures,entity-framework-core,ef-core-2.0,C#,Stored Procedures,Entity Framework Core,Ef Core 2.0,我在EF Core中有以下代码来运行存储过程: TenandId = user.TenantId; userName = user.UserName; updateDate = DateTime.Now; TimeStart = 139601; TimeEnd = 139612; RequestId = id; _context.TempRequest.FromSql("EXEC dbo.AddRequest_To_TempRequest @TimeStart, @TimeEnd, @Tena

我在EF Core中有以下代码来运行存储过程:

TenandId = user.TenantId;
userName = user.UserName;
updateDate = DateTime.Now;
TimeStart = 139601;
TimeEnd = 139612;
RequestId = id;

_context.TempRequest.FromSql("EXEC dbo.AddRequest_To_TempRequest @TimeStart, @TimeEnd, @TenantId, @UpdateDate, @UserName, @RequestId",
                new SqlParameter("@TimeStart", TimeStart),
                new SqlParameter("@TimeEnd", TimeEnd),
                new SqlParameter("@TenantId", TenandId),
                new SqlParameter("@UpdateDate", updateDate),
                new SqlParameter("@UserName", userName),
                new SqlParameter("@RequestId", RequestId));
但当我运行它时,它不工作,但它也不会抛出任何错误

我犯了什么错误吗

谢谢

在原始SQL表示查询时使用。该方法创建LINQ/EF核心查询,但与往常一样,
IQueryable
/
IEnumerable
在迭代之前不会执行它(使用
foreach
ToList()
等),即所谓的延迟执行。这应该解释为什么“它不起作用,但也没有抛出任何错误”

对于非查询原始SQL语句,EF Core提供了另一种方法(或EF Core 3.0+中的
ExecuteSqlRaw
/
ExecuteSqlInterpolated
),可立即执行

这两种方法都可用于在执行时调用存储过程。看起来后者更适合您的场景,因此替换

_context.TempRequest.FromSql

我应该做这项工作

在原始SQL表示查询时使用。该方法创建LINQ/EF核心查询,但与往常一样,
IQueryable
/
IEnumerable
在迭代之前不会执行它(使用
foreach
ToList()
等),即所谓的延迟执行。这应该解释为什么“它不起作用,但也没有抛出任何错误”

对于非查询原始SQL语句,EF Core提供了另一种方法(或EF Core 3.0+中的
ExecuteSqlRaw
/
ExecuteSqlInterpolated
),可立即执行

这两种方法都可用于在执行时调用存储过程。看起来后者更适合您的场景,因此替换

_context.TempRequest.FromSql

我应该做这项工作