2010-05-25 93 views
2

我試圖用我的edmx自動生成的poco對象實現存儲庫模式。.Net Entity Framework&POCO ...查詢全表問題

在我的倉庫類,我有:

IObjectSet<E> _objectSet; 
private IObjectSet<E> objectSet 
{ 
    get 
    { 
     if (_objectSet == null) 
     { 
      _objectSet = this._context.CreateObjectSet<E>(); 
     } 
     return _objectSet; 
    } 
} 

public IQueryable<E> GetQuery(Func<E, bool> where) 
{ 
    return objectSet.Where(where).AsQueryable<E>(); 
} 

public IList<E> SelectAll(Func<E, bool> where) 
{ 
    return GetQuery(where).ToList(); 
} 

其中E是我的POCO類的一個。當我跟蹤數據庫,並運行此:

IList<Contact> c = contactRepository.SelectAll(r => r.emailAddress == "[email protected]"); 

它顯示了在SQL跟蹤的選擇在我的聯繫表的一切。我在哪裏錯了? 有沒有更好的方法來做到這一點?一個對象集不會延遲加載...所以它省略了where子句? 這是該文章稱使用對象集的......自從與POCO,我沒有EntityObject的通入「E」

http://devtalk.dk/CommentView,guid,b5d9cad2-e155-423b-b66f-7ec287c5cb06.aspx

回答

4

使用Expression<Func<E, bool>>而不是Func<E, bool>我讀。第一個告訴C#編譯器發出一個表達式樹(用於構建SQL查詢)而不是實際的代碼,其中第二個是一個普通的委託。這意味着在數據庫調用之後,您正在使用Linq進行過濾。

+0

工作,謝謝! – 2010-05-25 21:23:55