如何使用存储库模式查询交叉表?

时间:2012-04-23 21:37:58

标签: asp.net-mvc join repository-pattern

在我的asp.net mvc 3应用程序中,我使用了存储库模式。 我有3个实体,公司,国家,城市。他们每个人都有自己的存储库。公司实体拥有FoundedCountry和FoundedCity外键。 现在在视图中,我想展示公司的详细信息。在此视图中,我想查看公司详细信息以及FoundedCountry名称和FoundedCity名称。在我看来,我必须通过一种JOIN查询来处理这个问题。但我仍然坚持如何在存储库模式中实现这一点。如何在存储库模式中处理此JOIN?

谢谢。

2 个答案:

答案 0 :(得分:5)

存储库应该具有基于任务的界面。这意味着ORM,连接等都在存储库中。应用程序只看到一个界面,它返回一个可以使用的对象。

这意味着您不会在表周围创建存储库(它几乎违背了目的)。在您的场景中,我建议您拥有(至少)2个存储库:一个将处理与更新模型相关的所有内容,另一个将仅提供读取(查询)。

这意味着查询存储库将仅返回您想要的数据(它基本上返回视图模型位)。当然,实际的表和联接是存储库的实现细节。

答案 1 :(得分:2)

不要以阻止连接的方式构建存储库模式!这通常意味着对与当前HTTP请求关联的所有实例使用相同的ORM上下文(DataContext / ObjectContext)。

我认为拥有通用IRepository是一种反模式,因为数据库访问很少同时受限于单一类型的实体。

您可以将DataContext / ObjectContext视为一个存储库。

最后一条建议:如果您不知道存储库抽象是什么有用 - 请不要使用它。