【发布时间】:2013-11-04 12:55:12
【问题描述】:
我正在寻找几天前的答案,但没有结果。
我正在尝试使用 NHibernate 为通用存储库实现 IRepository 接口。界面如下:
public interface IRepository<TEntity, TKey> where TEntity : BaseEntity
{
TEntity GetById(TKey id);
void Insert(TEntity entidad);
void Update(TEntity entidad);
void Delete(TEntity entidad);
IQueryable<TEntity > Table { get; };
}
我知道 ISession 接口有一个扩展,它可以在我的查询中使用 LINQ,但我也知道该插件不能 100% 工作(我测试了它,但是当我尝试执行一些复杂的查询,它thwows未实现的异常,所以我不能使用那个插件)
我 100% 使用 ISession 中的 QueryOver 函数,所以.. 你知道将 IQueroOver 函数实现为 IQueryable 的任何方法吗(不启动“SELECT *”查询)?如果没有,是否还有其他想法可以在不使用 LINQ 扩展的情况下实现通用存储库模式?
非常感谢
【问题讨论】:
-
你好 James,Query
函数是 NHibernate.Linq 扩展的另一个函数 -
我不能使用它的原因是因为一些
join函数还没有被Linq扩展支持,我需要它 -
LEFT OUTER JOINs 在不相关的实体上不受支持,这是真的。我不知道将QueryOverAPI 转换为 LINQ 提供程序 API 的方法(据我所知,您不能这样做),因此您要么必须使用 LINQ 提供程序并仔细解决不支持的问题功能或公开IQueryOver<T,T>。作为旁注,我认为大约 90% 的时间并不真正需要存储库模式......
标签: c# linq nhibernate repository