【问题标题】:Creating Data Access Layer methods for Domain Models with extra data为具有额外数​​据的域模型创建数据访问层方法
【发布时间】:2015-02-15 18:03:00
【问题描述】:

我目前正在使用 C# 中的 MVC 4 构建一个博客发布 Web 应用程序,主要是为了磨练我的应用程序架构知识。

目前它处于分层结构中:

视图 > 视图模型 > 控制器 > 数据访问层 > 数据存储

稍后可能会在控制器和数据访问层之间添加一个服务层,但这不是这个特定问题的原因。

数据访问层方法的参数和返回类型应该是什么?

我目前的理解是视图模型的存在是为了向视图提供可能多于或少于域模型结构公开的数据。

在我的应用程序中,帖子由 PostId、Description、Content 和 UserId 组成。还有一个包含 UserId 和 UserFullName 的 Users 表。

Post 模型反映了 Posts 表,它存储 UserId 但不存储 UserFullName。因此,当我需要检索 Post 详细信息以及 UserFullName 以传递给视图时,DAL 方法应该返回什么?我创建了一个新的域模型,其中包含视图所需的所有数据,但这与域模型与其实现分离的事实背道而驰。我的想法是,当我在数据库中查询 Post 数据时,可以只返回一个 Object,以及 View 所需的任何其他内容。

这里需要一个完全通用的数据访问层还是有点矫枉过正?

【问题讨论】:

  • 您是否使用像 EF 这样的 ORM 进行数据访问?如果是,您可以根据需要延迟加载相关实体以及用于数据访问的 UoW 和存储库模式。
  • 是的,我目前正在使用 EF 进行数据访问。

标签: asp.net-mvc generics architecture data-access-layer


【解决方案1】:

在 EF 中存在 Include 方法,可让您从相关表中预加载记录。

public ActionResult Index()
{
    var model = context.Posts.Include("Users");
    return View(model);
}

.cshtml:

@model IEnumerable<Post>
@foreach(var post in Model)
{
    <p>@post.Description</p>
    @Html.Raw(post.Content)
    <p>By @post.Users.UserFullName</p>
}

更多详情请见http://msdn.microsoft.com/en-us/data/jj574232.aspx

【讨论】:

  • 太棒了!这使它非常简单。谢谢马克。
猜你喜欢
  • 1970-01-01
  • 2011-06-24
  • 2012-11-12
  • 2021-01-30
  • 2014-07-31
  • 2011-12-15
  • 2015-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多