ASP.NET MVC显示外键

时间:2016-06-27 19:35:13

标签: asp.net asp.net-mvc entity-framework

我在ASP.NET中使用MVC脚手架。我有一个具有外键的表,其中有一个我希望显示的外键。这有点令人困惑。

我有一个设备表,它通过ManufacturerModelID的外键链接到ManufacturerModel表。 ManufacturerModel表由ManufacurerModelID的主键,ManufacturerID的外键(来自Manufacturer表)和Model字段组成。在我的设备索引屏幕中,我想显示设备的制造商(来自制造商表)和模型。目前它将正确显示模型,但是当我尝试添加制造商时,我收到了整个ManufacturerModel记录,包括列标题。

在Index Controller的设备控制器ActionResult中,我有以下内容:

var devices = db.Devices.Include(d => d.DeviceType).Include(d => d.ManufacturerModel);
return View(devices.ToList());

在我的设备索引中,我有以下制造商和型号

 <th>
     @Html.DisplayNameFor(model => model.ManufacturerModel.ManufacturerID)
 </th>
 <th>
     @Html.DisplayNameFor(model => model.ManufacturerModel.Model)
 </th>

2 个答案:

答案 0 :(得分:1)

所以,如果我理解正确,你有

设备 - [ManufacturerModel] - &gt; ManufacturerModel - [ManufacturerID] - &gt;制造商

如果是这种情况,并且正确定义了外键,则模型中有一个名为Device的类,其中包含一个名为ManufacturerModel的属性,该属性具有一个名为Manufacturer的属性其中包含与Manufacturer表的列相关的属性。我将假设您分别有Name属性和列,并且您希望显示类似

的内容
<tr>
    <th>
        @Html.DisplayNameFor(model => model.ManufacturerModel.Manufacturer.Name)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.ManufacturerModel.Model)
    </th>
</tr>
<tr>
    <td>@model.ManufacturerModel.Manufacturer.Name</td>
    <td>@model.ManufacturerModel.Model</td>
<tr>

然后,在创建查询时,您还必须包括(加入)Manufacturer表,如

var devices = db.Devices
    .Include(d => d.DeviceType)
    .Include(d => d.ManufacturerModel)
    .Include(d => d.ManufacturerModel.Manufacturer)

答案 1 :(得分:0)

这是因为你的表关系。您的设备与ManufacturerModel没有直接关系。您的关系基于:设备&gt; DeviceType&gt; ManufacturerModel。 试试

  

var devices = db.Devices.Include(d =&gt; d.DeviceType).Include(d =&gt; d.DeviceType.ManufacturerModel);