@LiptonOlolo

EF Core, как правильно тащить нужные поля?

Доброго времени суток.
Есть примерно такая база:
Модели

public class BaseIdEntity
{
    public int Id { get; set; }
    public bool IsDeleted { get; set; }
}
 
//Основной класс, с которым и производится вся работа.
public class MAOrder : BaseIdEntity
{
    public DateTime DateStart { get; set; }
    public DateTime? DateEnd { get; set; }
    public DateTime? DateComplete { get; set; }
    public DateTime? PaymentDate { get; set; }
    public bool IsPaid { get; set; }
    public decimal Amount { get; set; }
    
    public MACounterparty? Counterparty { get; set; }
    public int? CounterpartyId { get; set; }
    
    public MAOrderStatus? Status { get; set; }
    public int? StatusId { get; set; }
 
    public MAPaymentType? PaymentType { get; set; }
    public int? PaymentTypeId { get; set; }
 
    public ApplicationUser? Creator { get; set; }
    public string? CreatorId { get; set; }
 
    public ApplicationUser? Worker { get; set; }
    public string? WorkerId { get; set; }
 
    public ICollection<MAOrderPosition> Positions { get; set; } //позиции заказа
}
 
public class MACounterparty : BaseIdEntity
{
    public CounterpartyCategory Category { get; set; }
 
    [MARequired]
    public string Name { get; set; }
 
    [MARequired]
    public string Telephone { get; set; }
 
    [EmailAddress]
    public string? EMail { get; set; }
    public string? Comment { get; set; }
 
    public ICollection<MAOrder> Orders { get; set; }
}
 
public class MAOrderPosition : BaseIdEntity
{
    public DateTime DateStart { get; set; }
    public DateTime? DateEnd { get; set; }
    public DateTime? DateComplete { get; set; }
    [MARequired]
    [MAMaxLength(150)]
    public string Description { get; set; }
 
    [MAMaxLength(150)]
    public string? Comment { get; set; }
 
    public decimal Cost { get; set; }
    public decimal CostPrice { get; set; }
    public int Count { get; set; }
    public bool IsReOrder { get; set; }
 
    public MAOrder? Order { get; set; }
    public int? OrderId { get; set; }
    
    public MAOrderStatus? Status { get; set; }
    public int? StatusId { get; set; }
    
    public MAOrderCategory? Category { get; set; }
    public int? CategoryId { get; set; }
}
 
public class NameColor : BaseIdEntity
{
    [MARequired]
    public string Name { get; set; }
    [MARequired]
    public string Color { get; set; }
}
 
public class MAOrderCategory : NameColor
{
    public ICollection<MAOrderPosition> Positions { get; set; }
}
 
public class MAOrderStatus : NameColor
{
    public ICollection<MAOrder> Orders { get; set; }
    public ICollection<MAOrderPosition> Positions { get; set; }
}
 
public class MAPaymentType : BaseIdEntity
{
    public string Name { get; set; }
    public ICollection<MAOrder> Orders { get; set; }
}



Есть страницы с отображением заказов (MAOrder), но туда нужны данные: все НЕ навигационные св-ва, контрагент (Counterparty - Только имя и телефон), позиции заказа (Positions, все поля кроме 2-х), Статус (Status).

Как правильно тащить такие данные из базы? Через Include попадает очень много мусора (особенно в контрагентов). Через Select - очень много кода. Так же в определенных моментах нужно дополнять Where, чтобы обирать нужные заказы.
Какие Best-practies в этом моменте?
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
vabka
@vabka Куратор тега C#
Токсичный шарпист
Select/Automapper/Mapster. Больше вариантов нет.

На счёт количества кода я бы поспорил - в случае с Select никто не запрещает переиспользовать уже написанный код, если он используется в многих местах.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы