在EF Core 3.0与2.2中执行存储过程

时间:2020-01-09 01:13:41

标签: asp.net-core entity-framework-core .net-core-3.1

我正在尝试更新代码以适应EF Core 3.0中的更改,特别是弃用ExecuteSqlCommand

以下代码在2.2中运行,但是如上所述,我需要摆脱ExecuteSqlCommand

SqlParameter srcid = new SqlParameter("@srcCharacterId", participantApplication.CharacterId);
SqlParameter newid = new SqlParameter("@newCharacterId", newCharacterId);
SqlParameter pResult = new SqlParameter
{
    ParameterName = "@pResult",
    SqlDbType = System.Data.SqlDbType.Bit,
    Direction = System.Data.ParameterDirection.Output
};

_db.Database.ExecuteSqlCommand("pCharacterCopy @srcCharacterId, @newCharacterId, @pResult OUTPUT", srcid, newid, pResult);

我尝试将调用更改为ExecuteSqlRaw(其他所有内容相同),但是尽管可以编译,但在运行时会引发以下异常:

SqlParameterCollection仅接受非null的SqlParameter类型对象,而不接受SqlParameter对象

我已经通过调试器进行检查,SqlParameter都不为空。我怀疑对ExecuteSqlRaw的调用的格式不正确,但是除了将调用集成到不需要的Linq查询中之外,我找不到任何示例。我只想触发对存储过程的调用,并在完成后查看输出参数。

1 个答案:

答案 0 :(得分:13)

这很可能是由于switch to Microsoft.Data.SqlClient造成的。

删除对System.Data.SqlClient程序集的引用,并替换名称空间。

using System.Data.SqlClient; => using Microsoft.Data.SqlClient;