c# - 如何使用EF执行带有输入和输出参数的存储过程?

标签 c# sql-server entity-framework stored-procedures

我使用的是 EF 代码优先方法,并且我使用迁移创建了存储过程,如下所示:

public override void Up()
    {
        Sql(@"CREATE TYPE IdsList AS TABLE   
                    ( 
                    Id Int
                    )
                    GO

                    Create Procedure getChildIds(
                    @IdsList dbo.IdsList ReadOnly
                    )
                    As
                    Begin
                    WITH RecursiveCTE AS
                    (
                        SELECT Id
                        FROM dbo.PhysicalObjects
                        WHERE ParentId in (Select * from @IdsList)
                        --Where Id=108
                        UNION ALL

                        SELECT t.Id
                        FROM dbo.PhysicalObjects t
                        INNER JOIN RecursiveCTE cte ON t.ParentId = cte.Id
                    )
                    SELECT * FROM RecursiveCTE
                    End");
    }

    public override void Down()
    {
        Sql(@"Drop Type IdsList
                Go
                Drop Procedure getChildIds");
    }

现在,如果我转到 sql server management studio 并执行以下脚本:

Declare @Ids dbo.IdsList

Insert into @Ids
SELECT 1

Exec getChildIds @Ids

它将成功执行,但现在我正尝试按如下方式执行该存储过程:

 var idsList = new SqlParameter {ParameterName = "idsList",  Value = new int[] { 1,2,3,4,5} };

 var idParams = new SqlParameter("idParams", SqlDbType.Structured)
            {
                Direction = System.Data.ParameterDirection.Output
            };

var results = dbContext.Database.SqlQuery<int>("getChildIds @idsList, @idParams out", idsList,idParams) ;

var idsResult = (List<int>)idParams.Value;

它不返回任何东西。

那么如何执行带有表类型输入和输出参数的存储过程呢?

最佳答案

关于c# - 如何使用EF执行带有输入和输出参数的存储过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48866189/

相关文章:

c# - 生成 SelectListItem 列表的 IQueryable 扩展方法

c# - 结构图 : How to setup for Specific Concrete Instance of Interface to use particular CTOR

c# - 如何在连接字符串中使用 ip 地址和用户名?

sql - 在另一个表的两行之间加入表示 "transfer"的表

c# - 使用 linq 在 C# 中拆分和加入

sql-server - Select语句性能

sql-server - 使用 SQL 项目的 TFS 2012 进行部署不包括部署后脚本

c# - 在此上下文中仅支持原始类型或枚举类型

c# - Entity Framework 和连接表达式中的一对多配置

.net - 尝试安装 '5.0.0'的 'EntityFramework'版本,但项目已包含其他版本