我无法正确获得此设计。我正在使用存储库模式来管理我的数据层。在我的一个控制器(MVC3)中,我构建了一个需要执行连接的LINQ查询。我有2个关于这方面的问题:使用存储库模式与EF4加入集合的难度
- 是最好添加一个方法到我的仓库来执行所有连接,投影等?我对此有点犹豫,因为这会导致我的存储库中不断增长的合同定义?
- 比方说,我有一个Post回购的List()方法返回所有项目。我目前不能在linq(join)查询中使用此方法,因为它无法将其转换为商店表达式。请注意下面的代码使用了一个名为repo的类,它使用相同的上下文实例来引用我所有的存储库(post,friends)。
BIG编辑: 事情多一点我清楚了,但我希望有人会在这里跳,并帮我把一切都安排;-)。我正在做的是与我的存储库模式一起实现一个规范模式。问题是,我正在使用POCO,并且我的存储库正在使用使用IObjectSets的IContext接口。所以在下面的列表方法中,Posts是一个IObjectSet,而Context是一个IContext接口,我注入了我的实际上下文。
我一直在阅读,有一些非常好的准备使用的代码,如 implementing-repository-pattern-with-ef4-poco-support和implementing-repository-pattern-with-entity-framework。
这两个示例都使用存储库中的objectContext。把这个抽象出来也不是更好吗?
我的资料库:
public System.Linq.IQueryable<Post> List()
{
return this.context.Posts;
}
而且在我的控制器方法:
var friendquestions = (from q in base._repo.Post.List().OfType<Question>()
from f in _repo.Friends.List()
where f.userId == myid
where q.Author == f.friendId
select q.Id).ToArray();
下不工作,但是,(为什么?):
var temp = (from q in base._repo.Post.List().OfType<Question>()
where q.Id > 6
select q.Id).ToArray();
它基本上是同样的问题在此处描述:linq-to-entities-does-not-recognize-the-method
我该如何设计?我一直在阅读模型定义的函数,但我不确定这是否是要走的路?
在此先感谢
嗯,看起来像我的第一个问题通常使用规范模式解决 – Syg