1

我无法正确获得此设计。我正在使用存储库模式来管理我的数据层。在我的一个控制器(MVC3)中,我构建了一个需要执行连接的LINQ查询。我有2个关于这方面的问题:使用存储库模式与EF4加入集合的难度

  1. 是最好添加一个方法到我的仓库来执行所有连接,投影等?我对此有点犹豫,因为这会导致我的存储库中不断增长的合同定义?
  2. 比方说,我有一个Post回购的List()方法返回所有项目。我目前不能在linq(join)查询中使用此方法,因为它无法将其转换为商店表达式。请注意下面的代码使用了一个名为repo的类,它使用相同的上下文实例来引用我所有的存储库(post,friends)。

BIG编辑: 事情多一点我清楚了,但我希望有人会在这里跳,并帮我把一切都安排;-)。我正在做的是与我的存储库模式一起实现一个规范模式。问题是,我正在使用POCO,并且我的存储库正在使用使用IObjectSets的IContext接口。所以在下面的列表方法中,Posts是一个IObjectSet,而Context是一个IContext接口,我注入了我的实际上下文。

我一直在阅读,有一些非常好的准备使用的代码,如 implementing-repository-pattern-with-ef4-poco-supportimplementing-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

我该如何设计?我一直在阅读模型定义的函数,但我不确定这是否是要走的路?

在此先感谢

+0

嗯,看起来像我的第一个问题通常使用规范模式解决 – Syg

回答

0

是不是会好一些抽象的说出来呢?

回答:您可以查看 - Ritesh rao的 - NCommon。已经使用IEFSession来包装 的ObjectContext。