我使用實體框架5,有一個通用的存儲庫,其內有幾種方法,如兩個Get()方法如下:需要接受實體ID和包括通用EF方法
public TEntity GetById(int id)
{
return DbSet.Find(id);
}
public TEntity Get(
Expression<Func<TEntity, bool>> filter = null,
IEnumerable<string> includePaths = null)
{
IQueryable<TEntity> query = DbSet;
if (filter != null)
{
query = query.Where(filter);
}
if (includePaths != null)
{
query = includePaths.Aggregate(query, (current, includePath) => current.Include(includePath));
}
return query.SingleOrDefault();
}
這些都是都非常有幫助的,但是當我想打一個稍微複雜GetById()調用和檢索,同時一些實體引用,就像這樣:
var user = _userRepository.GetById(
id,
new List<string> { "Roles", "Invoices" });
我最終不得不推出實體特定的(所以非泛型)爲每個實體調用GetById(id,includes),以便我可以訪問它們的s在lambda,即用戶ID或InvoiceId等pecific ID域
public User GetById(
int id,
IEnumerable<string> includes)
{
return Get(
(u => u.UserId == id),
includes);
}
看來,我不能,我的平均EF技能,工作如何DbSet.Find(ID)的善良與結合以通用方式調用.Include()調用。
所以問題是 - 是否有一種方法來編寫一個通用的EF方法,我可以用它來獲取一個實體的id幷包含一些引用,並且依次刪除編寫實體特定的GetById(id,includes )電話就像我上面所做的。
在此先感謝。
嗨盧克,你能告訴我電話的一個例子您GetBy()方法嗎? – Bern
@bern當然看到編輯 –
@bern我前段時間也用一個示例MVC解決方案在我的通用存儲庫上寫了一篇文章。 http://blog.staticvoid.co.nz/2011/10/13/staticvoid_repository_pattern-nuget –