Динамическое включение Entity Framework для набора общих типов не работает - PullRequest
0 голосов
/ 09 ноября 2019

У меня есть следующий метод, который предполагает, что параметр string[] include включает динамические подмножества сущности:

 public virtual CEntity GetByID(int id, string[] include = null)
 {
     // for testing
     include = new string[] { "TypeEntity" };

     using (var _context = new CodeGenerator.Data.AppContext())
     {
         TEntity dbEntity = default;

         if (include != null)
         {

             var query = _context.Set<TEntity>().AsNoTracking();

             //problem here >

             for (int i = 0; i < include.Length; i++)
             {
                 query.Include(include[i]);
             }

             // debugging the sql statement > it didn't add any include statements, just selec statement
             // expected      dbEntity.TypeEntity != null
             // actual result dbEntity.TypeEntity = null

             dbEntity = query.Where(e => e.ID == id).FirstOrDefault();
         }
         else
         {
             dbEntity = _context.Set<TEntity>().AsNoTracking().FirstOrDefault(e => e.ID == id);
         }

         if (dbEntity == null)
         {
             return null;
         }

         return _mapper.Map<CEntity>(dbEntity);
     }
 }

Моя сущность ProjectEntityProperty

public interface IEntity
{
    int ID { get; set; }
}
public class Entity : IEntity
{
    public int ID { get; set; }
}

 public class ProjectEntityProperty : Entity
 {
     public int EntityId { get; set; }

     public string Name { get; set; }
     public string Type { get; set; } = "string";

     public int? TypeEntityId { get; set; }
     public int Order { get; set; } = 0;

     public bool IsNullable { get; set; } = false;
     public bool IsPrimary { get; set; } = false;

     public ProjectEntity TypeEntity { get; set; }
     public ProjectEntity Entity { get; set; }
 }

Оператор включения не выполняетне включает подмножество элемента, которое TypeEntity, но этот код работал:

 return _context.ProjectEntityProperties.AsNoTracking()
                                .Include("TypeEntity")
                                .Where(k => k.EntityId == entityId)
                                .ToList()
                                .Select(_mapper.Map<ProjectEntityProperty>)
                                .ToList();

Что-то не так с моей функцией GetByID?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...