【问题标题】:Cannot run stored procedure from Entity Framework Core无法从 Entity Framework Core 运行存储过程
【发布时间】:2020-03-05 16:29:01
【问题描述】:

我在 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));

但是当我运行它时,它不工作,但它也没有抛出任何错误。

我有错吗?

谢谢

【问题讨论】:

    标签: c# stored-procedures entity-framework-core ef-core-2.0


    【解决方案1】:

    FromSql 在原始 SQL 表示 查询 时使用。并且该方法创建 LINQ / EF Core 查询,但像往常一样使用 IQueryable<> / IEnumerable<> 在迭代之前不会执行它(使用 foreachToList() 等) - 所谓的延迟执行。这应该可以解释为什么“它不工作,但它也没有抛出任何错误”。

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

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

    _context.TempRequest.FromSql
    

    _context.Database.ExecuteSqlCommand
    

    应该做的工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多