Asp.net mvc 添加MVC控制器脚手架错误
我将使用有效的上下文类型或未定义的实体键进行循环。我已附上较长错误消息的副本。只是尝试创建一个连接到现有数据库的测试应用程序 这是代码-提前感谢Asp.net mvc 添加MVC控制器脚手架错误,asp.net-mvc,controller,scaffolding,Asp.net Mvc,Controller,Scaffolding,我将使用有效的上下文类型或未定义的实体键进行循环。我已附上较长错误消息的副本。只是尝试创建一个连接到现有数据库的测试应用程序 这是代码-提前感谢 public class TestPerson { int ID { get; set; } string FirstName { get; set; } string LastName { get; set; } string Hair { get; set; } string Race { get;
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; }
}
公共类TestPerson
{
int ID{get;set;}
字符串名{get;set;}
字符串LastName{get;set;}
字符串头发{get;set;}
字符串竞赛{get;set;}
字符串测量值{get;set;}
}
公共类TestPersonContext:DbContext
{
公共DbSet TestPersons{get;set;}
}
您应该知道哪个值是实体框架的关键
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; }
}
公共类TestPerson
{
[Key]public int ID{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共字符串Hair{get;set;}
公共字符串竞赛{get;set;}
公共字符串度量值{get;set;}
}
公共类TestPersonContext:DbContext
{
公共DbSet TestPersons{get;set;}
}
您可以从中了解更多关于DataAnnotations的信息。您应该将一个属性设置为主键。在您的情况下,这将是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; }
}
公共类TestPerson
{
[关键]
公共int ID{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共字符串Hair{get;set;}
公共字符串竞赛{get;set;}
公共字符串度量值{get;set;}
}
公共类TestPersonContext:DbContext
{
公共DbSet TestPersons{get;set;}
}
顺便问一下,为什么你所有的财产都是私人的?建议公开所有这些文件,特别是主键
更重要的是,还有一种称为配置之上的约定的东西,它在实体框架中被大量使用。其中一项公约是主键公约,其中规定:
代码首先推断,如果属性位于
类的名称为“ID”(不区分大小写),或者后面跟着类名
通过“ID”。如果主键属性的类型是数字或GUID,请将其删除
将配置为标识列
在您的例子中,实际上您已经利用了这种约定,因此如果您的ID属性是公共的,那么即使没有[Key]属性,您的代码也可能正常工作 为了安全性、数据可靠性和其他原因,您应该使用DataAnnotation,而不是添加[Key]adding public修复了脚手架问题。8 recxomend阅读我在答案中发布的文档。是的,我正在重新阅读它们,因为数据仍然没有保存到数据库中,所以回到起始点我不确定,但在同一文件中写入DataContext和model可能是个问题。试着把它们分开。尝试在另一个文件上定义上下文,更好地在另一个目录上定义上下文。我确实做了更改。我遇到的问题是将记录保存到本地数据库,而不是现有的sql数据库。但这可能是另一个问题,要更改目标数据库,您需要适当地设置连接字符串(通常可以在web.config文件中找到)