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

C# EF:执行命令时,参数必须是数据库参数或值,c#,sql-server,entity-framework,stored-procedures,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.Dat

执行不带返回值但具有如下用户定义表类型的存储过程时:

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
执行存储过程?

在这种情况下,您需要(如错误消息所示)创建
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);
这应该会有所帮助