EF:执行命令时,参数必须仅是数据库参数或值

时间:2018-08-08 15:53:50

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

当执行没有返回值但具有用户定义的表类型的存储过程时:

var dbStrings = new SqlParameter("@data", SqlDbType.Structured)
{
    TypeName = new StringListType().Name,
    Value = new StringListType().DataRecordsFrom(listOfStrings.Select(p => p.Value).ToList())
 };
_dbContext.Database.ExecuteSqlCommand("exec [dbo].[InsertRecords] @SID, @filerType, @data", sid.ToString(), "Field", dbStrings);

我收到错误

  

执行命令时,参数必须仅是数据库参数或值

如何通过具有多个输入参数(某些UDTT)的DbContext执行存储过程?

1 个答案:

答案 0 :(得分:1)

在这种情况下,您需要(根据错误消息告诉您)创建SqlParameter的数组,并在调用ExecuteSqlCommand时传递它。

var sqlParams = new SqlParameter[]
{
    new SqlParameter("@SID", sid.ToString()),
    new SqlParameter("@filterType", "Pin"),
    new SqlParameter("@data", SqlDbType.Structured)
    {
        TypeName = new StringListType().Name,
        Value = new StringListType().DataRecordsFrom(listOfStrings.Select(p => p.Value).ToList())
    }
};

_dbContext.Database.ExecuteSqlCommand("exec [dbo].[InsertRecords] @SID, @filterType, @data", sqlParams);