C# 如果新类基于另一个类,则控制器仍需要密钥

C# 如果新类基于另一个类,则控制器仍需要密钥,c#,asp.net-mvc,asp.net-mvc-4,razor,C#,Asp.net Mvc,Asp.net Mvc 4,Razor,我正在这样做- 文件->新项目->Visual C#.Net Framework 4.5。->ASP.NETMVC4Web应用程序 我正在创建一个类Personne和一个从Personne派生的类Etudiant(在models文件夹下) 人事 using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace TestTryHelper.Models {

我正在这样做-

文件->新项目->Visual C#.Net Framework 4.5。->ASP.NETMVC4Web应用程序

我正在创建一个类Personne和一个从Personne派生的类Etudiant(在models文件夹下)

人事

 using System;
 using System.Collections.Generic;  
 using System.Linq;
 using System.Web;

 namespace TestTryHelper.Models
 {
     public class Personne
     {
         public int PersonneId { get; set; }
         public string Nom { get; set;}
         public string Prenom { get; set; }

     }

     public class Etudiant : Personne
     {
         public string Ecole { get; set; }
     }
 }
我正在尝试添加HomeController(控制器/add/Controller)

控制器名称:HomeController 缩放选项 模板:MVC控制器,具有使用实体框架的读/写操作和视图 模型类:Etudiant(TestTryHelper.Models) 数据上下文类:
在窗口中,新建数据上下文TestTryHelper.Models.TestTryHelpPerContext 单击“确定” 视图:剃须刀
单击添加

我收到了这个错误信息

 Unable to retrieve metadata for 'TestTryHelper.Models.Etudiant'.
 One or more validation errrors were detected during mode generation:

 -System.Data.Entity.Edm.EdmEntity,Type:  EntityType 'Etudiant'
 has no key defined.  Define the key for this EntityType.
 -system.Data.Entity.Edm.EdmEntitySet: EntityType: EntitySet ' Etudiants' is based on type    
 'Etudiant that has no keys defined.
出于某种原因,它在为其他人工作。我可以通过在Etudiant类下添加一个etudiantd来解决这个问题

任何人都会知道为什么它对某些人有效而对其他人无效


谢谢

如果您将属性
PersonneId
更改为仅
Id
,我认为这两种类型都适用。或者,使用
[Key]
属性装饰
PersonneId
属性,这将向EF指示要用作表键的属性:

 public class Personne
 {
     [Key]
     public int PersonneId { get; set; }
     public string Nom { get; set;}
     public string Prenom { get; set; }

 }
您可能还需要将以下内容添加到代码顶部:

 using System.ComponentModel.DataAnnotations;

我试着只使用Id而不是PersonneId,效果很好。我想试试你的其他选择,但我能想出如何放置钥匙[]你能告诉我怎么做吗。谢谢你的两个解决方案,解决了我的问题。感谢您的慷慨帮助。当我尝试在更改后重新运行时,我遇到了一个问题,即自DB创建以来,模型上下文已更改,是否有方法重新生成模型?我找不到任何.edmx要重新生成我首先使用了代码您需要删除数据库并给出代码重新生成数据库,或者自己修改数据库以匹配poco类。@Terry我已删除数据库,但仍然出现相同的错误。poco课程?