【问题标题】:Difficulty joining collections using a repository pattern with EF4使用带有 EF4 的存储库模式加入集合时遇到困难
【发布时间】:2012-10-29 17:26:55
【问题描述】:

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

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

大编辑: 现在事情对我来说有点清楚了,但我希望有人会跳到这里来帮助我把一切整理好;-)。我要做的是实现一个规范模式以及我的存储库模式。问题是,我正在使用 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

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

提前致谢

【问题讨论】:

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

标签: entity-framework-4 linq-to-entities repository-pattern specification-pattern


【解决方案1】:

把它抽象出来不是更好吗?

Answer:你可以看看Ritesh rao的-NCommon。已经使用 IEFSession 来包装 ObjectContext。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    相关资源
    最近更新 更多