Asp.net mvc MVC:为自动生成的模型类中的类型设置键

Asp.net mvc MVC:为自动生成的模型类中的类型设置键,asp.net-mvc,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 4,我正在使用VisualStudio2012、MVC4和Razor(CSHTML)。 我使用Entity Framework 6自动生成AdventureWorks2012数据库MVC模型。 我创建了一个新文件夹DAL(数据访问层),并在此文件夹中创建了我的DataContext类 using AdventureWorks_site.Models; using System.Data.Entity; using System.Data.Entity.ModelConfiguration.Conve

我正在使用VisualStudio2012、MVC4和Razor(CSHTML)。 我使用Entity Framework 6自动生成AdventureWorks2012数据库MVC模型。 我创建了一个新文件夹DAL(数据访问层),并在此文件夹中创建了我的DataContext类

using AdventureWorks_site.Models;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;

namespace AdventureWorks_site.DAL
{
    public class AdventureWorksContext : DbContext
    {
        public DbSet<Person> person { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            // Configure Code First to ignore PluralizingTableName convention 
            // If you keep this convention, the generated tables  
            // will have pluralized names. 
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        }    
    }    
}
使用AdventureWorks\u site.Models;
使用System.Data.Entity;
使用System.Data.Entity.ModelConfiguration.Conventions;
命名空间AdventureWorks_site.DAL
{
公共类AdventureWorksContext:DbContext
{
公共DbSet person{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
//首先配置代码以忽略PluralizingTableName约定
//如果保持此约定,则生成的表
//将有多个名称。
modelBuilder.Conventions.Remove();
}    
}    
}

当我尝试基于Person类和上面的AdventureWorksContext创建控制器时,它会显示一条错误消息,指出Person类没有密钥,因此失败。但是,我可以修改该类并添加一个键,因为它是一个自动生成的类,所以可能需要在某个时候再次生成它,以恢复我所做的任何更改。有没有一种方法可以从上下文类中分配一个键?或者有人可以提供一种不同的方法。

数据库中的Person表有密钥吗?我甚至没有想过要检查它。但是是的。它是PK\u Person\u BusinessEntityID。我正在使用AdventureWorks2012数据库。然后您需要弄清楚为什么自动生成过程不包含这些信息。你是怎么生成的?很好。我可以在类中看到“key”列,但它不是作为key列生成的。我添加了ADO.NET实体数据模型,方法是右键单击模型文件夹,然后按照添加所需数据库的步骤进行操作。(实体框架6.0)从数据库刷新模型没有帮助?