c# - 如何使用 .net 核心 Entity Framework 中的表值参数调用存储过程

标签 c# .net sql-server entity-framework-core

我有一个带有表值参数的存储过程。 我必须从 .net 核心中的 Entity Framework 调用它。

我在上下文对象上找不到任何 API。

我已经尝试使用 ADO.net API 并且它有效,但现在我必须从 .net 核心中的 EF 调用它。我必须调用的存储过程返回我必须捕获的结果。

我的样本SP如下

CREATE PROCEDURE [dbo].[GetMyData] 
@MyRequest [dbo].[MyRequestType] Readonly
As 
BEGIN

--Its sample SP thats why returned request table as it is    
select * from @MyRequest


END

MyRequestType 是用户定义的表类型

它的结构如下

CREATE TYPE [dbo].[MyRequestType] AS TABLE(
    [Id] [numeric](22, 8) NULL,
    [Col1] [bigint] NULL,
    [Col2] [numeric](22, 8) NULL 
) 

我在 EF 核心中使用代码优先方法

我们将不胜感激。

最佳答案

最后,我可以从使用 EF 核心的 .net 核心服务调用表值参数存储过程

我创建了假的响应域模型

   public class MyResponse
    {
        public int Id { get; set; }
        public int Col1{ get; set; }
        public int Col2 { get; set; } 
    }

我称它为假域模型,因为域模型通常是 CLR 类中的表表示,但我在 SQL Server 中没有这样的表。

然后我在 Context 类下为此添加了属性,如下所示

public class MyQueryDbContext : DbContext
{
  public virtual DbSet<MyResponse> Data { get; set; }
    .
    .
    .
}

然后需要为请求参数列表创建数据表,我添加如下

 DataTable table = new DataTable();
 table.Columns.Add("Id", typeof(int));
 table.Columns.Add("Col1", typeof(int));
 table.Columns.Add("Col2", typeof(int));

然后我使用 EF 从 .net 核心 API 调用存储过程并将数据表作为参数传递,如下所示

 var parameter = new SqlParameter("@MyRequest", SqlDbType.Structured);
 parameter.Value = table;
 parameter.TypeName = "[dbo].[MyRequestType]" // My Table valued user defined type
var response=_context.Data
                     .FromSql("EXEC [dbo].[GetMyData] @MyRequest", parameter)
                     .ToList()

您将在响应变量中得到响应。

关于c# - 如何使用 .net 核心 Entity Framework 中的表值参数调用存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54782689/

相关文章:

c# - 将条件传递给 Tuple<string, string, Func<bool>> 的 Func<bool>

c# - 来自 c# asp.net webforms 中数据表的自定义 JSON 数据

c# - SOAP 的 WSDL - REST 怎么样?

.net - 您如何将 LINQ-to-SQL 映射到您的 BLL 类?

.net - SQLite 数据库大小太大

c# - 使用 API 检索 Google Drive 文件夹列表

c# - 如何使用 .net 或 vba 在 excel 中使用的范围末尾插入新行?

sql - 如果在 SQL 中的 WHERE CLAUSE 中未找到某个值,则显示 NULL

sql-server - 使 UDF 独立于 DATEFIRST 设置

sql-server - 如何更改表添加具有命名默认约束和命名外键约束的列?