我目前正在使用C#中的MVC 4构建一个博客发布Web应用程序,主要是为了磨练我对应用程序架构的了解。
目前它采用分层结构:
查看>查看模型>控制器>数据访问层>数据存储
稍后可能会在控制器和数据访问层之间添加服务层,但这不是此特定问题的原因。
数据访问层方法的参数和返回类型应该是什么?
我目前的理解是存在视图模型,以便为视图提供可能比域模型的结构暴露更多或更少的数据。
在我的应用程序中,帖子包含PostId,Description,Content&用户身份。还有一个Users表,其中包含UserId和UserFullName。
Post Model镜像Posts表,它存储UserId但不存储UserFullName。因此,当我需要检索Post详细信息以及UserFullName以传递给View时,DAL方法应该返回什么?我创建了一个新的域模型,其中包含View所需的所有数据,但这违背了域模型从其实现中解耦的事实。我认为只有在查询数据库中的Post数据时才能返回一个Object,以及View所需的其他内容。
这里需要一个完全通用的数据访问层,还是过度杀伤?
答案 0 :(得分:0)
在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。