【发布时间】:2020-02-15 21:11:38
【问题描述】:
我有以下问题。 我的示例模型如下所示:
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 序列化。
我的项目结构如下。 我有在我的控制器中使用的通用存储库模式
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();
}
我试图完成的是找到一种方法,如何将相关设施类型包括在我在下面的方法中返回的培训中。
[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();
}
【问题讨论】:
-
您刚刚注意到在尝试构建通用存储库时存在严重限制。我建议您不要使用它,而是利用 EntityFramework 本身,它已经是一个具有
DbSet<T>类型的存储库。 -
所以真的没有办法绕着它走吗?
标签: c# asp.net asp.net-core asp.net-web-api