EF Core создает несколько объектов, если коллекция содержит как значения NULL, так и значения, отличные от NULL.C#

Место общения программистов C#
Ответить
Anonymous
 EF Core создает несколько объектов, если коллекция содержит как значения NULL, так и значения, отличные от NULL.

Сообщение Anonymous »

Я столкнулся с неожиданным поведением в EF Core 6: запрос создает два отдельных экземпляра сущности вместо одного, когда связанная коллекция содержит как значения NULL, так и значения, отличные от NULL.
Пример кода:

Код: Выделить всё

public async Task Get(int id)
{
var result = await _dbContext.Orders
.Where(o => o.Id == id)
.Select(o => new OrderDto
{
Id = o.Id,
ProductCategories = o.OrderItems
.Select(oi => oi.ProductCategory)
.Distinct()
.ToList()
})
.SingleOrDefaultAsync();
return result;
}
Базовый запрос к базе данных возвращает следующие строки из JOIN:



OrderId
ProductCategory




1
NULL


1
Электроника


1
Аксессуары



Ожидаемый результат:



Id
ProductCategories




1
["Электроника", "Аксессуары", null]



Фактический результат — два объекта OrderDto:



Id
ProductCategories




1
["Электроника", "Аксессуары"]


1
[null]


  • Использование .AsSplitQuery() до того, как .SingleOrDefaultAsync() устранит проблему и вернет один объект, как ожидалось.
  • Проблема возникает только в том случае, если коллекция содержит как NULL, так и не NULL значения
Вопросы
  • Почему EF Core создает два отдельных объекта вместо объединения всех значений в один список? И почему AsSplitQuery разрешает эту проблему?
  • Это известное ограничение/ошибка в EF Core 6?


Подробнее здесь: https://stackoverflow.com/questions/798 ... ll-and-non
Ответить

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

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

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

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

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