Я использую .NET 8 и Ontity Framework Core 8. < /p>
Я строю слой запроса, где мои методы возвращают iqueryable, чтобы обеспечить дальнейшую композицию (фильтрация, сортировка, подкидка) перед выполнением. Например, OrderDTO может содержать объект CustomerDTO. Общей задачей является обращение с нулевыми отношениями (например, заказ, возможно, еще не назначен клиенту). Похоже, это работает, но я обеспокоен тем, является ли это надежной и рекомендуемой передовой практикой, или это может привести к проблемам перевода или проблемам с производительностью в более сложных сценариях.
Мой вопрос: выступает непосредственно на вложенные DTO с использованием 3 -х операторов для обработки Nulls с надежным паттерном в EF Core 8? Или есть более стандартный или более безопасный способ этого? Давайте предположим, что у нас есть модели воспитания и детской. Я хочу запросить список воспитания и спроектировать их в ParentDTO, который содержит вложенную childto.
объекты
public class ParentEntity
{
public int Id { get; set; }
public string Name { get; set; }
public int? ChildId { get; set; } // Nullable foreign key
public ChildEntity Child { get; set; } // Nullable navigation property
}
< /code>
public class ChildEntity
{
public int Id { get; set; }
public string Description { get; set; }
}
dto
public class ParentDto
{
public int Id { get; set; }
public string Name { get; set; }
public ChildDto? Child { get; set; } // Nested DTO
}
public class ChildDto
{
public int Id { get; set; }
public string Description { get; set; }
}
Метод запроса
public IQueryable GetParentDtos(DbContext dbContext)
{
return dbContext.Parents
.AsNoTracking()
.Select(parent => new ParentDto
{
Id = parent.Id,
Name = parent.Name,
// This is the pattern in question:
// Is this ternary operator reliable for EF Core's SQL translation?
Child = (parent.Child != null) ? new ChildDto
{
Id = parent.Child.Id,
Description = parent.Child.Description
} : null
});
}
< /code>
сгенерированный запрос t-sql с использованием тройного оператора < /strong> < /p>
SELECT [p].[Id], [p].[Name], CASE
WHEN [c].[Id] IS NOT NULL THEN CAST(1 AS bit)
ELSE CAST(0 AS bit)
END, [c].[Id], [c].[Description]
FROM [parents] AS [p]
LEFT JOIN [children] AS [c] ON [p].[ChildId] = [c].[Id]
запрос T-sql, не использующий Ternary Operator
SELECT [p].[Id], [p].[Name], [c].[Id], [c].[Description]
FROM [parents] AS [p]
LEFT JOIN [children] AS [c] ON [p].[ChildId] = [c].[Id]
Подробнее здесь: https://stackoverflow.com/questions/797 ... le-nulls-a
Проецируется непосредственно на вложенные DTOS с использованием тройных операторов для обработки NULLS надежного шаблона ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение