我要使用有效的上下文类型或未定义的实体键进入圈子。我附上了较长错误消息的副本。只是尝试创建一个连接到现有数据库的测试应用程序。
这是代码 - 提前感谢
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; }
}
答案 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; }
}
了解有关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]属性,您的代码也可能正常工作。