在我的 asp.net mvc 3 应用程序中,我使用的是存储库模式。我有 3 个实体,公司、国家、城市。他们每个人都有自己的存储库。公司实体有FfoundedCountry 和FfoundedCity 外键。现在在视图中,我想显示公司详细信息。在这个视图中,我想查看公司详细信息以及FundedCountry 名称和FfoundedCity 名称。在我看来,我必须使用一种 JOIN 查询来处理这个问题。但我被困在如何在存储库模式中实现这一点。如何在存储库模式中处理此 JOIN?
谢谢你。
在我的 asp.net mvc 3 应用程序中,我使用的是存储库模式。我有 3 个实体,公司、国家、城市。他们每个人都有自己的存储库。公司实体有FfoundedCountry 和FfoundedCity 外键。现在在视图中,我想显示公司详细信息。在这个视图中,我想查看公司详细信息以及FundedCountry 名称和FfoundedCity 名称。在我看来,我必须使用一种 JOIN 查询来处理这个问题。但我被困在如何在存储库模式中实现这一点。如何在存储库模式中处理此 JOIN?
谢谢你。
存储库应具有基于任务的界面。这意味着 ORM、连接等都在存储库中。该应用程序只看到一个接口,该接口返回一个它可以使用的对象。
这意味着您不会围绕表创建存储库(它几乎没有达到目的)。在您的场景中,我建议您(至少)有 2 个存储库:一个将处理与更新模型相关的所有内容,另一个将仅提供读取(查询)。
这意味着查询存储库将只返回您想要的数据(它基本上返回视图模型位)。当然,实际的表和连接是存储库的实现细节。
不要以阻止连接的方式构建您的存储库模式!这通常意味着对与当前 HTTP 请求关联的所有实例使用相同的 ORM 上下文(DataContext/ObjectContext)。
我认为拥有一个通用的 IRepository 是一种反模式,因为数据库访问很少同时受限于单一类型的实体。
您可以认为 DataContext/ObjectContext 本身就是一个存储库。
最后一条建议:如果您不知道存储库抽象有什么好处 - 不要使用它。