.net core 导航只能针对具有键的实体类型

.net core 导航只能针对具有键的实体类型,.net-core,entity,.net Core,Entity,我正在从事一个“数据库优先”方法的项目restapi后端。我使用的是ASP.NETCore3.1和实体框架3.1.1 我将脚本运行到scaffold数据库中模型和db上下文类中。但是,一些模型构建函数有表/模型没有键x.hasnokey()。我原以为这样可以,但我在尝试访问端点时出错,该端点表示 ERROR : InvalidOperationException: The navigation '' cannot be added because it targets the ke

我正在从事一个“数据库优先”方法的项目
restapi
后端。我使用的是
ASP.NETCore3.1
实体框架3.1.1

我将脚本运行到
scaffold
数据库中
模型和
db上下文类中。但是,一些
模型
构建
函数
表/模型
没有键
x.hasnokey()
。我原以为这样可以,但我在尝试访问端点时出错,该端点表示

 ERROR :  InvalidOperationException: 
    The navigation '' cannot be added because it targets the keyless entity type  'AAA'
    Navigations can only target entity types with keys
这种情况发生在几个不同的地方,在过去,这种情况最初运行正常。这是在SQL Server 2012(版本11)
上运行的。我不知道如何解决这个问题,我的
entity/sql
经验有限,我不知道从哪里开始。下面是有问题的行(在
DB Context
中):


我相信这可能是因为最初创建于10-15年前的
数据库
,无法像我希望的那样轻松地制作成
ORM
。这也可能是
版本控制
的问题,我运行的
脚手架脚本
不正确,或者如果我只是超出了我的深度,但我希望被指出正确的方向。谢谢大家!

我想你有两个选择

1-转到并将键添加到表中

2-检查以下链接


谢谢

错误
通常是由于
主键
问题引起的。 在我的例子中,我运行这个查询,结果与您提到的问题相同

 var exists = await _dbDontext.Students.FindAsync(Id);
我的
学生表
与其他
有关系,其他
表之一
缺少
主键

因此,有两种可能的解决方案

解决方案1: 将
错误中提到的
表中的
列设置为
主键

解决方案2
如果事情很复杂,只需删除
,然后重新创建即可。它可以正常工作

在上下文中从实体配置中删除以下行

entity.HasNoKey();
 var exists = await _dbDontext.Students.FindAsync(Id);
entity.HasNoKey();