У меня следующая проблема. Мои примерные модели выглядят следующим образом:
public class FacilityType
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsDeleted { get; set; }
}
public class Training
{
public int Id { get; set; }
public string Name { get; set; }
public virtual FacilityType FacilityType { get; set; }
public int FacilityTypeID { get; set; }
public bool IsDeleted { get; set; }
}
Когда я создаю новый объект типа обучения, я хочу, чтобы он возвращался моим API с не только FacilityTypeID, но также FacilityType как объект, сериализованный в JSON.
Структура моего проекта следующая. У меня есть общий шаблон c репозитория, который я использую в своих контроллерах
public interface IGenericRepository<TEntity> where TEntity: class, IEntity
{
IEnumerable<TEntity> GetAllEntities();
Task<TEntity> GetEntityById(int id );
Task CreateEntity(TEntity entity);
Task UpdateEntity(int id, TEntity entity);
Task DeleteEntity(int id);
}
public async Task<TEntity> GetEntityById(int id )
{
return await context.Set<TEntity>().Where(ent => ent.IsDeleted != true && ent.Id == id).FirstOrDefaultAsync();
}
И что я пытаюсь сделать sh - это найти способ, как включить связанный тип объекта в обучение, которое я возвращаю в методе ниже .
[HttpGet("{id}")]
public async Task<ActionResult<Training>> GetTraining(int id)
{
return await repository.GetEntityById(id);
}
Заранее благодарен за ваш вклад :)
PS:
Является ли использование предикатов в параметре методов хорошей идеей? Вот так: И, кстати. как вызвать такой метод, например, с помощью выражения linq?
public async Task<ICollection<TEntity>> GetEntityById(Expression<Func<TEntity, bool>> predicate)
{
//return await context.Set<TEntity>().Where(ent => ent.IsDeleted != true && ent.Id == id).FirstOrDefaultAsync();
return await context.Set<TEntity>().Where(predicate).ToListAsync();
}