Search code examples
stored-procedures.net-coreentity-framework-core-2.1

How to pass null parameters to context query type in Entity Framework Core 2.1


I am working on Entity Framework Core 2.1 within .NET Core application. I have written stored procedure to get claims list via Context Query-Type which take three parameters where two of them are nullable Guid. It work fine as far no null parameter pass over but with passing null parameters, it throw error

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

error

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

EF Query Type

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;
 }

Solution

  •   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);