【发布时间】:2010-02-16 10:12:49
【问题描述】:
请在阅读答案后阅读我在问题末尾的更新:
我正在尝试应用存储库模式 如Rob Conery's described on his blog 在“MVC 店面”下。 但是我想问一些问题 在我应用这个设计之前我有 模式。
Rob 制作了自己的“模型”并使用了一些 ORM“LINQ to SQL or Entity Framework (EF)”将他的数据库映射到 实体。
然后他使用自定义存储库 给出
IQueryable<myModel>和 他制作的这些存储库 在 ORMEntities和他的Model类之间映射或“解析”。我在这里问什么:
是否可以在 ORM
Entities和我的 模型“classes”并仅加载 我想要的属性?我希望 重点很清楚。
POCO 更新
**
这是我在多次建议和尝试后做出的决定:
**
毕竟,就 Rob Conery 先生的意见而言,我有更好的解决方案:
- 我将模型构建为“
POCOs”并将它们放在“模型层”中,因此它们与“edmx”文件无关。 - 构建我的存储库来处理这个依赖于“
DbContext”的“POCO”模型 - 然后我创建了一个“
ViewModels”来从这些存储库中获取视图所需的信息。
所以我确实不需要需要在“EF 模型”和“我的模型”之间再添加一层。我只是稍微扭曲我的模型并强制 EF 处理它。
在我看来,这种模式比 Rob Conery 的模式要好。
【问题讨论】:
-
您是关心从表中加载所有数据还是从表的单行中加载所有列?无论哪种情况,无论存储库模式如何,都有一些方法可以加载您想要的内容。
-
这就是上帝发明视图模型和 AutoMapper 的原因。您不应该将模型中的所有内容都返回到您的视图中……那只是糟糕的设计。你在这里谈论两件不同的事情......你在谈论数据访问和在视图上显示数据。这些应该分开保存。存储库模式非常适合 DI 到您的控制器中......我强烈推荐它,因为它很简单。
标签: asp.net-mvc entity-framework orm repository-pattern poco