如何将空参数传递给 Entity Framework Core 2.1 中的上下文查询类型

Tox*_*xic 2 stored-procedures .net-core entity-framework-core-2.1

我正在 .NET Core 应用程序中使用 Entity Framework Core 2.1。我已经编写了存储过程来通过上下文查询类型获取声明列表,它采用三个参数,其中两个是可为空的 Guid。它工作正常,因为没有空参数传递但传递空参数,它会抛出错误

https://docs.microsoft.com/en-us/ef/core/modeling/query-types

错误

The parameterized query '(@UserVal uniqueidentifier,@ClientVal nvarchar(4000),@Consultati' expects the parameter '@ClientVal', which was not supplied.
Run Code Online (Sandbox Code Playgroud)

EF 查询类型

public override IQueryable<GetSystemClaims> Execute()
{
  public Guid UserId { get; set; }
  public Guid? ClientId { get; set; }
  public Guid? ConsultationId { get; set; }


var userParam = new SqlParameter("@UserVal", UserId);
var clientParam = new SqlParameter("@ClientVal", ClientId);
var consultationParam = new SqlParameter("@ConsultationVal", ConsultationId);

        var userClaimsList = Context.Query<UserClaimsQueryView>().FromSql("EXECUTE dbo.ListUserClaims @userId=@UserVal, @clientId=@ClientVal, @consultationId=@ConsultationVal"
            , userParam, clientParam, consultationParam);

        return userClaimsList;
 }
Run Code Online (Sandbox Code Playgroud)

Tox*_*xic 8

  var userParam = new SqlParameter("@UserVal", UserId);

  var clientParam = new SqlParameter("@ClientVal", SqlDbType.UniqueIdentifier);
  clientParam.Value = (object)ClientId ?? DBNull.Value;

  var consultationParam = new SqlParameter("@ConsultationVal", SqlDbType.UniqueIdentifier);
  consultationParam.Value = (object)ConsultationId ?? DBNull.Value;

  var userClaimsList = Context.Query<UserClaimsQueryView>().FromSql("EXECUTE dbo.ListUserClaims @userId=@UserVal, @clientId=@ClientVal, @consultationId=@ConsultationVal"
            , userParam, clientParam, consultationParam);
Run Code Online (Sandbox Code Playgroud)