Raj*_*jiv 4 .net c# sql-server entity-framework-core
我有一个带有表值参数的存储过程。我必须从 .net 核心中的实体框架调用它。
我在上下文对象上找不到任何 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
Run Code Online (Sandbox Code Playgroud)
MyRequestType 是用户定义的表类型
它的结构如下
CREATE TYPE [dbo].[MyRequestType] AS TABLE(
[Id] [numeric](22, 8) NULL,
[Col1] [bigint] NULL,
[Col2] [numeric](22, 8) NULL
)
Run Code Online (Sandbox Code Playgroud)
我在 EF 核心中使用代码优先方法
任何帮助将不胜感激。
最后,我可以从使用 EF 核心的 .net 核心服务调用表值参数存储过程
我创建了假响应域模型
public class MyResponse
{
public int Id { get; set; }
public int Col1{ get; set; }
public int Col2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我称它为假域模型,因为域模型通常是 CLR 类中的表表示,但我在 SQL Server 中没有这样的表。
然后我在 Context 类下为此添加了属性,如下所示
public class MyQueryDbContext : DbContext
{
public virtual DbSet<MyResponse> Data { get; set; }
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
然后需要为请求参数列表创建数据表,我添加如下
DataTable table = new DataTable();
table.Columns.Add("Id", typeof(int));
table.Columns.Add("Col1", typeof(int));
table.Columns.Add("Col2", typeof(int));
Run Code Online (Sandbox Code Playgroud)
然后我使用 EF 从 .net core 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()
Run Code Online (Sandbox Code Playgroud)
您将在您的响应变量中得到响应。