.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();