请原谅我有些不清楚,因为我刚开始接触NHibernate/LINQ/Lambda表达式,并且我实际上不确定要寻找什么...
在过去的4或5年中,我一直在使用.NET 2.0,没有任何机会除了自己以外进步,这就是为什么现在我正在学习新技术的原因 :)
我一直在阅读很多博客和帖子,并开始一个个人小项目,尽可能地使用存储库模式。
我现在处于以下情况:
- MyProject.Core.dll:我拥有这个核心程序集,其中包含所有业务逻辑并设置IRepository契约。它对存储库的实际实现一无所知,它在运行时使用IoC解析,因此这个核心dll没有引用NHibernate dll。 - MyProject.Data.NHibernate.dll:存储库的实现包含在此程序集中,该程序集具有对NHibernate dll的所有必要引用。
我的存储库实现看起来像这样:
这个方法可以正常工作,但是NHibernate首先查询数据库以返回所有行,然后LINQ过滤结果,只返回名称为“Dave”的行。
我已经在互联网上寻找了很久,但是我没有找到如何实现这一点的方法,我发现许多东西似乎已经过时了,例如,我经常看到对NH session.Linq()方法的调用,我查看了我的dll文件,但是这个方法无处可寻...
如果有人能指导我正确的方向,也许附带一个小例子之类的,我将非常感激。
非常感谢!
在过去的4或5年中,我一直在使用.NET 2.0,没有任何机会除了自己以外进步,这就是为什么现在我正在学习新技术的原因 :)
我一直在阅读很多博客和帖子,并开始一个个人小项目,尽可能地使用存储库模式。
我现在处于以下情况:
- MyProject.Core.dll:我拥有这个核心程序集,其中包含所有业务逻辑并设置IRepository契约。它对存储库的实际实现一无所知,它在运行时使用IoC解析,因此这个核心dll没有引用NHibernate dll。 - MyProject.Data.NHibernate.dll:存储库的实现包含在此程序集中,该程序集具有对NHibernate dll的所有必要引用。
我的存储库实现看起来像这样:
public class GenericRepository<T> : IGenericRepository<T> where T : class
{
...
public virtual IQueryable<T> All()
{
IList<T> entities = Session
.CreateCriteria( typeof( T ) )
.List<T>();
return entities.AsQueryable<T>();
}
...
}
因此,在我的核心DLL中,我可以获取对存储库的引用,然后进行以下操作:
IList<Person> people = myRepository.All().ToList();
看起来很不错,它查询数据库并返回Person表中的所有行。
然而,现在我想要做的是添加谓词:
IList<Person> daves = myRepository.All().Where(p => p.Name == "Dave").ToList();
这个方法可以正常工作,但是NHibernate首先查询数据库以返回所有行,然后LINQ过滤结果,只返回名称为“Dave”的行。
我已经在互联网上寻找了很久,但是我没有找到如何实现这一点的方法,我发现许多东西似乎已经过时了,例如,我经常看到对NH session.Linq()方法的调用,我查看了我的dll文件,但是这个方法无处可寻...
如果有人能指导我正确的方向,也许附带一个小例子之类的,我将非常感激。
非常感谢!