【发布时间】:2016-06-10 04:56:04
【问题描述】:
我有一个使用实体框架的代码示例
这个正在工作:
public ActionResult Index()
{
BlogContext dbContext = new BlogContext();
dbContext.Posts.Include(a => a.Tags).ToList();
return View(dbContext.Posts.ToList());
}
而这个不是:
public ActionResult Index()
{
BlogContext dbContext = new BlogContext();
dbContext.Posts.Include(a => a.Tags);
return View(dbContext.Posts.ToList());
}
所以我不明白,为什么只转换为List 就足以包含模型中的标签(List<Tags>),我会理解是否会这样,这也很好(我正在使用它!问题与代码格式无关!):
public ActionResult Index()
{
BlogContext dbContext = new BlogContext();
var model=dbContext.Posts.Include(a => a.Tags).ToList();
return View(model);
}
但它不需要。所以我的问题是:
为什么将 IQueryable 转换为 toList 会将数据包含到对象 dbContext? 我知道在实体框架中我们正在使用扩展,但据我所知,扩展返回值不会将值分配给对象。
这是我崩溃的部分观点:
@using BlogWeb.Models
@model Post
<h1>@Model.Title</h1>
<p class="lead">
by <a href="#">1234</a>
</p>
<hr>
<p>@Model.Created</p>
<p class="lead">
@Model.Body
</p>
@Html.Partial("_Tags", Model.Tags) -<< this is what is throwing error
<hr>
这是部分标签视图
@using BlogWeb.Models
@model List<Tag>
@foreach (Tag tag in Model)
{
@Html.Label('#' + tag.TagName)
@Html.Raw(" ")
}
错误信息:
传入字典的模型项是类型 'BlogWeb.Models.Post',但是这个字典需要一个模型项 输入“System.Collections.Generic.List`1[BlogWeb.Models.Tag]”。
【问题讨论】:
-
我不确定为什么第一个有效,但 IMO 最后一个是正确的方法。
-
定义“工作”和“不工作”。
-
@JeffMercado 我在问题中包含了更多数据,另一方面,它只是没有将标签列表包含到对象中。它一直是空的
-
您的代码看起来不对劲。以 dbContext 开头的行从未分配给变量,因此它们基本上什么都不做。强烈推荐 reshaper...
-
问题不是关于“我应该如何编写代码”我已经知道的。问题是为什么在这个例子中我什至不需要变量。同样 resharper 对 mvc 也没用
标签: c# asp.net entity-framework asp.net-mvc-4 extension-methods