【问题标题】:Execute sql statement or procedure in .net entity framework core在.net实体框架核心中执行sql语句或过程
【发布时间】:2022-01-03 10:10:28
【问题描述】:

我创建了 ASP.NET 5.0 Core-Web-API 项目并使用包 Microsoft.EntityFrameworkCore 版本 5.0.13。此外,我创建了一个带有 2 个 DATE 类型参数的存储过程。该程序在sql management studio中运行没有错误。

var p1 = new SqlParameter("@From", System.Data.SqlDbType.DateTime);
p1.Value = new DateTime(2021, 11, 07);
var p2 = new SqlParameter("@To", System.Data.SqlDbType.DateTime);
p1.Value = new DateTime(2021, 12, 07);
List<MapTableDimvw> myList = myDbContext.MyTable.FromSqlRaw("EXEC myProc @From, @To", p1, p2).ToList();

【问题讨论】:

  • 在这种情况下不要使用FromSqlInterpolated。 EF 尝试为 '{}' 包围的所有内容创建一个参数。
  • 这能回答你的问题吗? How to execute an .SQL script file using c#
  • @Scircia 不这么认为。我也可以在 EF 中运行程序。但我不知道如何通过FromRawSqlFromSqlInterpolated 在EF 中执行new SqlCommand()
  • 只是确保您没有在此处正确复制\粘贴代码,或者只是错过了错误:您在 p1 上调用 .Value 两次(而不是在创建 SqlParameter 后在 p2 上调用 .Value)

标签: c# .net tsql entity-framework-core


【解决方案1】:

我认为您可以执行以下操作:

var blogs = context.myTable
.FromSqlRaw($"Select Id, colA, colB From myTable")
.ToList();
// or AsEnumerable();
var blogs = context.myTable
.FromSqlRaw($"Select Id, colA, colB From myTable")
.AsEnumerable();

来源:Raw SQL Queries

否则,您可以尝试添加类似这样的内容:

var simple = _context.myTable.FromSqlInterpolated($"Select Id, colA, colB From myTable").ToList();

问候。

【讨论】:

  • 问题不是他不能运行查询,而是查询在一个文件中,当他从文件中读取语句时不能运行。
  • 好的,但如果你这样做: String sql = "your sql query"; var simple = myDbContext.myTable.FromSqlInterpolated("sql");那行得通吗?这只是为了了解问题是在文本文件的读取中,还是在查询的解释中。
  • 谢谢帮助。正如 Gert Arnold 提到并解释了here 我不能为FromSqlInterpolated 使用预构建字符串。受您帮助的启发,我尝试了stored procedures。但是后来我通过传递参数遇到了错误。请提交我的编辑。
  • 为什么你不这样做:string myQueryString = string.Format("EXEC myProc {0}, {1}", p1, p2); 用于准备 SQL 查询,然后List&lt;MapTableDimvw&gt; myList = myDbContext.MyTable.FromSqlRaw(myQueryString).ToList();
  • 我编辑我的问题。并解决了你和 Gert Arnold 提到的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-18
  • 1970-01-01
  • 1970-01-01
  • 2019-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多