这是设置:
型号:
public class Device
{
[Key]
public int Id { get; set; }
[MaxLength(50)]
public String Name { get; set; }
public Category Category { get; set; }
public Manufactor Manufactor { get; set; }
public virtual ICollection<Comment> Comments { get; set; }
public virtual ICollection<Status> Status { get; set; }
}
ControllerAction:
public ActionResult Index()
{
var devices = db.Devices.Include("Categories").Include("Manufactors").Select(x => new Device
{
Name = x.Name,
Category = x.Category,
Comments = x.Comments,
Manufactor = x.Manufactor,
Status = x.Status
});
return View(db.Devices.ToList());
}
查看:
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Manufactor.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Category.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Status)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
@Html.ActionLink("Details", "Details", new { id=item.Id }) |
@Html.ActionLink("Delete", "Delete", new { id=item.Id })
</td>
</tr>
}
这里的问题是,只显示名称,但item.Category
和item.Manufactor
没有显示。如果我将行更改为@ item.Category.Name,我将遇到Nullreference异常。
将我的数据库放入设备表中,列出了2个设备,每个设备都有一个CategoryId和ManufactorId。
我认为这是一个20分钟的明智,但似乎我在某处非常错误。请帮我解决这个错误。
如果您需要其他代码,请将其发布在评论中。
亲切的问候
修改 回答那些非常有用的答案:错误是我错误的控制器操作。 这个解决方案有效:
return View(db.Devices.Include(d => d.Manufactor).Include(d => d.Category).ToList());
答案 0 :(得分:4)
您的模型属性称为Category
,而不是Categories,
,因此请确保您正在使用Include
:
db.Devices.Include("Category")...
当然Manufacturers
也是如此。您的模型属性名为Manufactor
而非Manufactors
,因此请包含正确的属性:
.Include("Manufactor")
现在EF会在表格中进行正确的连接,并为您在视图中使用的Category
和Manufactor
属性提供保管。
答案 1 :(得分:3)
除了Darin的回答:还有一个强类型的Include()
方法可供使用,当您使用不存在的属性时,它会在编译时发出警告:
db.Devices.Include(d => d.Category)