c# - EF : When executing a command, 参数必须完全是数据库参数或值

标签 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);

我收到错误

When executing a command, parameters must be exclusively database parameters or values

如何通过具有多个输入参数(某些 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);

关于c# - EF : When executing a command, 参数必须完全是数据库参数或值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51750922/

相关文章:

php - MySQL 唯一键场景

c# - 如何让 EF 6 在 INSERT 期间处理数据库上的 DEFAULT CONSTRAINT

entity-framework - 无法从主应用程序执行自定义 NuGet 包的代码优先迁移

wpf - Entity Framework 在克隆后附加异常

c# - 在不使用 new 关键字的情况下在 C# 中创建对象?

c# - PowerShell中的对象相等标准是什么?ServiceController如何定义Equals方法?

sql - 查找具有相同的记录

c# - 如何使用 C# 调用接收 Delphi 开放数组参数的函数?

c# - 星期几的 DateTimeFormatInfo 字符串格式。周四变成 Th

sql-server - 微软 SQL Server 2016,错误 : 1068 AND Error: 3417 AND Error: 1225 in Windows 10 Pro