-
Notifications
You must be signed in to change notification settings - Fork 397
Open
Labels
Description
First of all, thank you for Mapster — it's been a great fit for our project and we really appreciate the work you've put into it.
I've run into what looks like a bug with ProjectToType when mapping a nullable navigation property to a record DTO that has non-nullable value type parameters. Here I provide additional context if it helps track this down.
Mapster version: 10.0.6
EF Core version: 10.0.5
Minimal reproduce
// Entities:
public class OrderEntity
{
public int Id { get; set; }
public int? CodId { get; set; }
public OrderCodEntity? Cod { get; set; }
}
public class OrderCodEntity
{
public int Id { get; set; }
public long Value { get; set; }
}
// DTOs:
public record OrderDto(int Id, OrderCodDto? Cod);
public record OrderCodDto(long Value);
// Mapping + query:
TypeAdapterConfig<OrderEntity, OrderDto>.NewConfig();
TypeAdapterConfig<OrderCodEntity, OrderCodDto>.NewConfig();
var results = dbContext.Orders
.ProjectToType<OrderDto>()
.ToList(); // throws when any Order has Cod == null
// Seed data:
new OrderEntity { Id = 1, Cod = new OrderCodEntity { Value = 42L } } // OK
new OrderEntity { Id = 2, Cod = null } // causes crashExpected behavior
OrderDto(1, OrderCodDto(42))
OrderDto(2, null)
Actual behavior
System.InvalidOperationException: Nullable object must have a value.
Workaround
.Map(
d => d.Cod,
s => s.Cod == null ? null : new OrderCodDto(s.Cod.Value)
);Note
The issue persists when using Mapster.EFCore 10.0.6 and calling EFCoreProjectToType<OrderDto>() instead of ProjectToType<OrderDto>() - same exception is thrown.
Reactions are currently unavailable