1

我很难让这个背后的设计正确。我正在使用存储库模式来管理我的数据层。在我的一个控制器(MVC3)中,我正在构建一个需要执行连接的 LINQ 查询。我对此有两个问题:

  1. 向我的存储库添加一个方法来执行所有连接、投影等更好吗?我对此有点犹豫,因为这会导致我的存储库上的合同定义不断增长?
  2. 假设我在返回所有项目的 Post 存储库中有一个 List() 方法。我目前无法在 linq (join) 查询中使用此方法,因为它无法将其转换为存储表达式。请注意,下面的代码使用了一个名为 repo 的类,它使用相同的上下文实例保存对我所有存储库(帖子、朋友)的引用。

大编辑: 现在对我来说事情有点清楚了,但我希望有人会跳到这里来帮助我把一切整理好;-)。我要做的是实现一个规范模式以及我的存储库模式。问题是,我正在使用 POCO,而我的存储库正在使用使用 IObjectSets 的 IContext 接口。因此,在下面的列表方法中,Posts 是一个 IObjectSet,Context 是一个 IContext 接口,我将实际上下文注入其中。

我一直在阅读并且有一些非常好的即用型代码,例如 implementation-repository-pattern-with-ef4-poco-supportimplementation-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

我该如何围绕这个设计?我一直在阅读模型定义的函数,但我不确定这是否可行?

提前致谢

4

1 回答 1

0

Isn't it better to abstract that out as well?

Answer : You can look into - NCommon of Ritesh rao. It has been used IEFSession to wrap the ObjectContext.

于 2012-02-28T11:27:04.783 回答