![](/img/trans.png)
[英]Should I be using a Generic Repository with Entity Framework 5?
[英]Generic Repository in C# Using Entity Framework
我想通過給出主鍵數組來檢索多個記錄,我必須為所有實體制作它的泛型方法。
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列,例如Product有ProductId,Order有OrderId。 我不想將我的數據庫列更改為Id。
Entities.Where(x=>id.Contains(id));
我希望我的實體列與現在相同。 我可以使用此db結構實現通用搜索方法來查找多條記錄嗎?
您可以在應用程序模型和數據庫模型中使用不同的名稱。 您必須將Model Ids映射到數據庫中的名稱:
在你的映射中,每個實體都有類似的東西:this.Property(t => t.Id).HasColumnName(“ProductId”);
您可以使用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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.