У меня есть следующий метод, который предполагает, что параметр 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
?