如何在CRUD功能中映射复合键

时间:2015-08-21 10:25:23

标签: asp.net-mvc-5 entity-framework-5 composite-key

我需要根据两个键(comp和part)进行映射。

@foreach (var item in Model) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.comp)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.part)
            </td>
             ...........................
            <td>
                @Html.ActionLink("Edit", "Edit", new { id=item.comp  }) |   
                @Html.ActionLink("Details", "Details", new { id = item.comp  }) |
                @Html.ActionLink("Delete", "Delete", new { id = item.comp  })
            </td>
        </tr>
    }

如何在Index页面和控制器中使用复合键。

public ActionResult Edit(int? id)
    {
         DataView record = db.RecordDataView.Find(id);
            if (record == null)
            {
                return HttpNotFound();
            }
            return View(record);
        }

如果有人有意,请回复。

2 个答案:

答案 0 :(得分:6)

find方法,通过主键查找实体。如果您有复合主键,则按照模型中定义的顺序传递键值:

@Html.ActionLink("Edit", "Edit", new { comp = item.comp, part = item.part }) |   
@Html.ActionLink("Details", "Details", new { comp = item.comp, part = item.part }) |
@Html.ActionLink("Delete", "Delete", new { comp = item.comp, part = item.part })

在控制器中,接收两个值:

public ActionResult Edit(int? comp, int? part)
{
    DataView record = db.RecordDataView.Find(comp, part);
    if (record == null)
    {
        return HttpNotFound();
    }
    return View(record);
}

答案 1 :(得分:0)

在应用上述建议时,出现了错误:

The parameters dictionary contains a null entry for parameter 'isdel' of non-nullable type 'System.Boolean' for method 'System.Web.Mvc.ActionResult Edit(System.Nullable`1[System.Int32], Boolean)' in Controller'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.

但根据this suggestion 我尝试将“详细信息”动作签名更改为

public ActionResult Details(int eid,bool isdeleted) //same parameter name as in my Entity Model.

带有复合键的CRUD功能现在可以正常执行。

感谢@Jelle Oosterbosch