Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 添加MVC控制器脚手架错误_Asp.net Mvc_Controller_Scaffolding - Fatal编程技术网

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文件中找到)