Ошибка обновления Linq В этом контексте поддерживаются только примитивные типы или типы перечисления - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь обновить только один столбец, который является EntityType.Но я получаю эту ошибку при создании оператора объединения и обновления.

В этом контексте поддерживаются только примитивные типы или типы перечисления.

 var entityCodesRepo = _context.EntityCodes.ToList();

   var qualifiedRecs = await (from px in searchQuery
                                    join ecx in entityCodesRepo on px.EntityCodeID equals ecx.EntityCodeID
                                       select new IDMS_Partner()
                                         {
                                          EntityType = ecx.DisplayLabel
                                         }
                                    ).ToListAsync();

Пожалуйста, укажите, где я совершаю ошибку.

[Table("IDMS_Partner")]
    public partial class IDMS_Partner
    {
        [Key]
        public int PID { get; set; }
        public int EntityCodeID { get; set; }
        public string EntityType { get; set; }
     }

1 Ответ

0 голосов
/ 15 мая 2018

Вы не можете присоединиться к IQueryable с IEnumerable в Linq-to-Entities, поэтому вам не следует материализовать EntityCodes с использованием ToList до присоединения с searchQuery.Во-вторых, в EF 6 вы не можете создать частичные сущности внутри запроса (хотя это не так в EF Core), поэтому, если IDMS_Partner принадлежит контексту, вы получите ошибку, поэтому либо используйте анонимный тип, либокакой-то класс DTO.Итак, наконец ваш запрос должен выглядеть следующим образом:

var entityCodesRepo = _context.EntityCodes;    

var qualifiedRecs = await (from px in searchQuery
                           join ecx in entityCodesRepo on px.EntityCodeID equals ecx.EntityCodeID
                           select new IDMS_PartnerDTO //it doesn't belong to context
                           {
                               EntityType = ecx.DisplayLabel
                           }).ToListAsync();
...