0

I used stored procedure.Although it matches the field types in sql it gives such an error.

System.InvalidOperationException: 'The cast to value type 'System.Double' failed because the materialized value is null. Either the result type's generic parameter or the query must use a nullable type.'

C# code

var data = UoW.Context.Database.SqlQuery<NewDeclarationItemReport>("exec GetDeclarationItemReportData @StartDate,@EndDate,@IsWorkOrder,@ReceiverId,@DeclarationId,@DeclarationItemId,@VoyageId,@WarehouseId,@OperationType,@PortId,@MaterialId",
           new SqlParameter { ParameterName = "@StartDate",     Value = dto.StartDate,DbType = System.Data.DbType.DateTime2 },
           new SqlParameter { ParameterName = "@EndDate",       Value = dto.EndDate, DbType = System.Data.DbType.DateTime2 },
           new SqlParameter { ParameterName = "@IsWorkOrder",   Value = dto.IsWorkOrder==false ? 0 : 1, DbType = System.Data.DbType.Int32 },
           new SqlParameter { ParameterName = "@ReceiverId",    Value = dto.ReceiverId != Guid.Empty ? dto.ReceiverId : (object)DBNull.Value, IsNullable = true, DbType = System.Data.DbType.Guid },
           new SqlParameter { ParameterName = "@DeclarationId", Value = dto.DeclarationId != Guid.Empty ? dto.DeclarationId : (object)DBNull.Value, IsNullable = true, DbType = System.Data.DbType.Guid },
           new SqlParameter { ParameterName = "@DeclarationItemId", Value = dto.DeclarationItemId != Guid.Empty ? dto.DeclarationItemId : (object)DBNull.Value, IsNullable = true, DbType = System.Data.DbType.Guid },
           new SqlParameter { ParameterName = "@VoyageId",      Value = dto.VoyageId != Guid.Empty ? dto.VoyageId : (object)DBNull.Value, IsNullable = true, DbType = System.Data.DbType.Guid },
           new SqlParameter { ParameterName = "@WarehouseId",   Value = dto.WarehouseId != Guid.Empty ? dto.WarehouseId : (object)DBNull.Value, IsNullable = true, DbType = System.Data.DbType.Guid },
           new SqlParameter { ParameterName = "@OperationType", Value = dto.OperationType==4 ? 4 : 5, DbType = System.Data.DbType.Int32 },
            new SqlParameter { ParameterName = "@PortId",        Value = ActivePort, DbType = System.Data.DbType.Guid },
           new SqlParameter { ParameterName = "@MaterialId",    Value = dto.MaterialId != Guid.Empty ? dto.MaterialId : (object)DBNull.Value, IsNullable = true, DbType = System.Data.DbType.Guid }
            ).ToList<NewDeclarationItemReport>();

SQL

ALTER PROCEDURE [dbo].[GetDeclarationItemReportData]
(
    @StartDate          datetime2,
    @EndDate            datetime2,
    @IsWorkOrder        int,
    @ReceiverId         uniqueidentifier,
    @DeclarationId      uniqueidentifier,
    @DeclarationItemId  uniqueidentifier,
    @VoyageId           uniqueidentifier,
    @WarehouseId        uniqueidentifier,
    @OperationType      int,
    @PortId             uniqueidentifier,
    @MaterialId         uniqueidentifier
)
Joel Coehoorn
  • 399,467
  • 113
  • 570
  • 794
ferdikocaa
  • 11
  • 4
  • 2
    Please insert code as text, not images. – Christopher Jun 09 '20 at 12:07
  • 1
    Also the error message seems pretty clear: The DB can apparently contain null values in that column. That is the default for everything but primary and foreign keys. Just use `double?` or otherwise deal with the null-value in the DB. – Christopher Jun 09 '20 at 12:09

0 Answers0