Я использую .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#
Место общения программистов C#
1752858850
Anonymous
Я использую .NET 8 и Ontity Framework Core 8. < /p>
Я строю слой запроса, где мои методы возвращают iqueryable, чтобы обеспечить дальнейшую композицию (фильтрация, сортировка, подкидка) перед выполнением. Например, OrderDTO может содержать объект CustomerDTO. Общей задачей является обращение с нулевыми отношениями (например, заказ, возможно, еще не назначен клиенту). Похоже, это работает, но я обеспокоен тем, является ли это надежной и рекомендуемой передовой практикой, или это может привести к проблемам перевода или проблемам с производительностью в более сложных сценариях.
[b] Мой вопрос: [/b] выступает непосредственно на вложенные DTO с использованием 3 -х операторов для обработки Nulls с надежным паттерном в EF Core 8? Или есть более стандартный или более безопасный способ этого? Давайте предположим, что у нас есть модели воспитания и детской. Я хочу запросить список воспитания и спроектировать их в ParentDTO, который содержит вложенную childto.
[b] объекты [/b]
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; }
}
[b] dto [/b]
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; }
}
[b] Метод запроса [/b]
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>
[b] сгенерированный запрос 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 [/b]
SELECT [p].[Id], [p].[Name], [c].[Id], [c].[Description]
FROM [parents] AS [p]
LEFT JOIN [children] AS [c] ON [p].[ChildId] = [c].[Id]
Подробнее здесь: [url]https://stackoverflow.com/questions/79706493/is-projecting-directly-to-nested-dtos-using-ternary-operators-to-handle-nulls-a[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия