Из вложенного списка Entity мы хотим выбрать объект и отобразить его в объекте Dto, но когда мы используем Automapper для фильтрации объекта, который deleteDate равен null
и сопоставим его, для каждого столбца фильтр Automapper снова включаетсядб.Как отфильтровать один раз и сопоставить выбранный объект Dto
Нам нужно сохранить всю информацию в нашей базе данных, поэтому используйте столбец DeleteDate со значением по умолчанию null
.поэтому мы используем отношение один ко многим для хранения истории наших данных.
public class User
{
public Guid UserId { get; set; }
public string MobileNumber { get; set; }
public string Email { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public IList<CustomerDetail> CustomerDetails { get; set; }
}
public class CustomerDetail
{
public Guid CustomerDetailId { get; set; }
public float MaximumAmountPerTransaction { get; set; }
public float MaximumAmountPerDay { get; set; }
public bool IsConfirm { get; set; }
public Guid UserId { get; set; }
public virtual DateTimeOffset CreateDate { get; set; }
public virtual DateTimeOffset? DeleteDate { get; set; }
}
public class CustomerResponse
{
[Key]
public Guid CustomerId{ get; set; }
public string MobileNumber{ get; set; }
public string Email { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public bool IsConfirm { get; set; }
public float? MaximumAmountPerTransaction { get; set; }
public float? MaximumAmountPerDay { get; set; }
}
public class CustomerDomainProfile : Profile
{
public UserDomainProfile()
{
CreateMap<User, CustomerResponse>()
.ForMember(dest => dest.CustomerId,
opt => opt.MapFrom(src => src.UserId))
.ForMember(dest => dest.Country,
opt => opt.MapFrom(src => src.Country.CommonName))
.ForMember(dest => dest.IsConfirm,
opt => opt.MapFrom(src => src.CustomerDetails.FirstOrDefault(cd => cd.DeleteDate == null).IsConfirm))
.ForMember(dest => dest.MaximumAmountPerTransaction,
opt => opt.MapFrom(src => src.CustomerDetails.FirstOrDefault(cd => cd.DeleteDate == null).MaximumAmountPerTransaction))
.ForMember(dest => dest.MaximumAmountPerDay,
opt => opt.MapFrom(src => src.CustomerDetails.FirstOrDefault(cd => cd.DeleteDate == null).MaximumAmountPerDay))
}
}
Я ожидаю запрос к базе данных и выбираю CustomerDetails с DeleteDate, равным нулю, и сопоставляем его, но тип нашего определения, длякаждый столбец пытается выполнить запрос к базе данных, потому что
Я ожидаю, что запрос к базе данных и выбор CustomerDetails с DeleteDate равен null
и его карте, но наше определение для каждого столбца пытается выполнить запрос к базе данных, потому что это можетне признать, что они из одной таблицы.Как мы можем идентифицировать их, выпавших из ряда, чтобы уменьшить запрос?есть другое решение или идея?