添加MVC Controller脚手架错误

时间:2014-02-02 00:08:36

标签: asp.net-mvc controller scaffolding

我要使用有效的上下文类型或未定义的实体键进入圈子。我附上了较长错误消息的副本。只是尝试创建一个连接到现有数据库的测试应用程序。

enter image description here

这是代码 - 提前感谢

    public class TestPerson
{
    int ID { get; set; }
    string FirstName { get; set; }
    string LastName { get; set; }
    string Hair { get; set; }
    string Race { get; set; }
    string Measurements { get; set; }
}

public class TestPersonContext : DbContext
{
    public DbSet<TestPerson> TestPersons { get; set; }
}

2 个答案:

答案 0 :(得分:0)

您应该告诉哪个值是实体框架的关键。

public class TestPerson
{
    [Key] public int ID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Hair { get; set; }
    public string Race { get; set; }
    public string Measurements { get; set; }
}

public class TestPersonContext : DbContext
{
    public DbSet<TestPerson> TestPersons { get; set; }
}

您可以从http://msdn.microsoft.com/en-us/data/jj591583.aspx

了解有关DataAnnotations的更多信息

答案 1 :(得分:0)

您应将其中一个属性设置为主键。在您的情况下,这将是ID属性:

public class TestPerson
{
    [Key]
    public int ID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Hair { get; set; }
    public string Race { get; set; }
    public string Measurements { get; set; }
}

public class TestPersonContext : DbContext
{
    public DbSet<TestPerson> TestPersons { get; set; }
}

顺便说一下为什么你的所有财产都是私有的?建议公开所有这些,特别是主键。

更重要的是,在实体框架中使用了一种称为约定优于配置的东西。其中一项公约是“主要公约”,其中规定:

  

Code First推断,如果a上的属性属性是主键   class被命名为“ID”(不区分大小写),或者后面是类名   通过“ID”。如果主键属性的类型是数字或GUID它   将被配置为标识列。

在您的情况下,您实际上已经利用了这些约定,因此如果您的ID属性是公共的,即使没有[Key]属性,您的代码也可能正常工作。