更改ASP .NET MVC模型类中的主键名称

时间:2011-02-08 16:48:40

标签: c# asp.net-mvc asp.net-mvc-3 entity-framework

我的模特课是:

 public class Contracts
    {
        public int ContractId { get; set; }
        public string contract { get; set; }            
    }

添加其控制器:

public ActionResult Index()
        {
            var contracts = from c in db.Contracts
                            select c;
            return View(contracts.ToList());    
        }

强类型视图返回:

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
            @Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
            @Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
        </td>
        <td>
            @item.ContractId
        </td>
        <td>
            @item.contract
        </td>
    </tr>
}

最初,基表的主键称为 ID 。然后我将其更改为 ContractId 以便在外键中使用。

如何设置模型主键以便视图识别它?

UPDATE1 :我正在使用EntityFramework 4

UPDATE2 :Brian提供的答案可以手动正确分配密钥。要解决我的问题,需要将表重命名为'合同'来自'合同'。我还将该表中的“合同”字段重命名为“名称”。然后我删除了'Contracts'模型类并将其重新创建为'Contract'。 VIEW文件夹已重命名为Contract。我的猜测是命名约定打破了主键的代码识别。

1 个答案:

答案 0 :(得分:3)

假设您在控制器上的操作方法是这样的:

public ActionResult Details(int id){
    // retrieve contract and generate view
}
      public ActionResult Edit(int id){
    // retrive contract and generate view
}
      public ActionResult Delete(int id){
    // delete contract
}

然后你的观点应该是这样的:

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