我想通过提供主键数组来检索多条记录,我必须为所有实体创建通用方法。
private DbSet<TEntity> _entities;
/// <summary>
/// Get entity by identifier
/// </summary>
/// <param name="id">Identifier</param>
/// <returns>Entity</returns>
public virtual TEntity GetById(object id)
{
return Entities.Find(id);
}
/// <summary>
/// Get entity by identifier
/// </summary>
/// <param name="id">Identifier</param>
/// <returns>Entity</returns>
public virtual List<TEntity> GetByIds(int id[])
{
// want to make it generic
return Entities.Where(x=>id.Contains(id));
}
/// <summary>
/// Gets an entity set
/// </summary>
protected virtual DbSet<TEntity> Entities
{
get
{
if (_entities == null)
_entities = _context.Set<TEntity>();
return _entities;
}
}
这里的问题是我的实体没有 ID 列,例如产品有 ProductId,订单有 OrderId。我不想将我的数据库列更改为 Id。
Entities.Where(x=>id.Contains(id));
我希望我的实体列与现在相同。我可以使用此数据库结构实现通用搜索方法来查找多条记录吗?
最佳答案
您可以使用 EF Core 提供的元数据服务,例如 FindEntityType和 FindPrimaryKey获取 PK 属性名称。然后,您可以使用它访问 LINQ to Entities 查询中的 PK 值,使用另一个 EF Core 提供的有用方法 EF.Property .
像这样:
public virtual List<TEntity> GetByIds(int[] ids)
{
var idName = _context.Model.FindEntityType(typeof(TEntity))
.FindPrimaryKey().Properties.Single().Name;
return Entities
.Where(x => ids.Contains(EF.Property<int>(x, idName)))
.ToList();
}
关于c# - 使用 Entity Framework 的 C# 中的通用存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55867725/