Проецируется непосредственно на вложенные DTOS с использованием тройных операторов для обработки NULLS надежного шаблонаC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Проецируется непосредственно на вложенные DTOS с использованием тройных операторов для обработки NULLS надежного шаблона

Сообщение Anonymous »

Я использую .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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»