Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改ASP.NET MVC模型类中的主键名称_C#_Asp.net Mvc_Asp.net Mvc 3_Entity Framework - Fatal编程技术网

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

C# 更改ASP.NET MVC模型类中的主键名称,c#,asp.net-mvc,asp.net-mvc-3,entity-framework,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

我的模范班是:

 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>
}
@foreach(模型中的变量项){
@ActionLink(“编辑”,“编辑”,新的{/*id=item.PrimaryKey*/})|
@ActionLink(“详细信息”,“详细信息”,新的{/*id=item.PrimaryKey*/})|
@ActionLink(“删除”,“删除”,新的{/*id=item.PrimaryKey*/})
@项目1.d
@项目.合同
}
最初,基表的主键称为ID。然后我将其更改为收缩,以便在外键中使用

如何设置模型主键,以便视图能够识别它

更新1:我正在使用EntityFramework 4


更新2:Brian提供的答案确实正确地手动分配了密钥。要解决我的问题,需要将表从“contract”重命名为“Contracts”。我还将该表中的“合同”字段重命名为“名称”。然后我删除了“Contracts”模型类,并将其重新创建为“Contract”。视图文件夹已重命名为Contract。我猜命名约定破坏了主键的代码识别。

假设您在控制器上的操作方法如下:

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>
}
那么您的视图应该如下所示:

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>
}
@foreach(模型中的变量项){
@ActionLink(“编辑”,“编辑”,新的{id=item.construcd})|
@ActionLink(“详细信息”,“详细信息”,新的{id=item.construcd})|
@ActionLink(“Delete”,“Delete”,new{id=item.construcd})
@项目1.d
@项目.合同
}

您的问题与MVC无关。您正在使用哪个ORM工具?Linq到SQL?EF?@Jacob-更新了我的问题-我使用的是EF 4实际上,这与MVC路由有关,与他的ORM无关,除了他使用同一类进行数据访问和视图模型这一事实。