【发布时间】:2014-05-13 21:11:32
【问题描述】:
我正在使用实体框架(对象上下文)检查通用存储库的可能性。
我有一个界面
interface IRepository<T> where T : class
{
IList<T> GetItems(Func<T, bool> Where, params string[] Navigations);
}
以及实现接口的类
class GenericRepository<T> : IRepository<T> where T : class
{
public IList<T> GetItems(Func<T, bool> Where, params string[] Navigations)
{
List<T> list;
using(var ctx = new Context())
{
IQueryable<T> query = ctx.CreateObjectSet<T>();
foreach (string nav in Navigations)
(query as ObjectQuery<O>).Include(nav);
list = query.Where(Where).ToList<T>();
}
return list;
}
}
然后我有另一个类扩展 GenericRepository。并实现另一个接口(现在不导入,因为该接口目前只是扩展了 IRepository 没有添加任何功能)。
class EmployeeRepository : GenericRepository<Employee>, IEmployeeRepository
{
}
当我想从我的存储库中获取数据时,我会这样做:
private void Test()
{
IEmployeeRepository rep = new EmployeeRepository();
IList<Employee> list = rep.GetItems(
e => e.Department.Name.Contains("Os")
&& e.Role.Type == 2,
"Department", "Role"
);
}
在这里我收到一条错误消息,提示 e.Department 为空(我相信我在 Role 上也有一个)。
模型有三个实体
- 员工
- 部门
- 角色
部门 1..* 员工 角色 1..1 员工
是否可以像我一样在参考表上添加预测? (有一些变化)。
谢谢!
【问题讨论】:
标签: c# sql frameworks repository entity