我正在尝试使用我的edmx自动生成的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 == "myemail@email.com");
它在sql跟踪中显示为我的Contact表中的所有内容的选择。我在哪里错了? 有一个更好的方法吗?对象集是否不是延迟加载...所以它省略了where子句? 这是我读过的文章说使用objectSet的...因为使用POCO,我没有将EntityObject传递给“E”
http://devtalk.dk/CommentView,guid,b5d9cad2-e155-423b-b66f-7ec287c5cb06.aspx
答案 0 :(得分:4)
使用Expression<Func<E, bool>>
代替Func<E, bool>
。第一个告诉C#编译器发出一个表达式树(用于构建SQL查询)而不是实际代码,其中第二个是普通委托。这意味着您在数据库调用后正在使用Linq to Objects进行过滤。