gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 06:21:14 27 4
gpt4 key购买 nike

我正在开发一个采用“数据库优先”方法 rest API 后端的项目。我正在使用 ASP .Net Core 3.1Entity Framework 3.1.1

我运行了一个脚本来脚手架数据库模型数据库上下文类中。然而,一些构建函数modeltables/models没有键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 内):

modelBuilder.Entity<AAA>(entity =>
{
entity.HasNoKey();

entity.ToTable("BBB_AAA");

entity.HasOne(d => d.BBB)
.WithMany(p => p.AAA)
.HasForeignKey(d => d.CCC)
.OnDelete(DeleteBehavior.ClientSetNull)
...
}

我用来脚手架模型数据库上下文脚本是(通用版本):

PM> Scaffold-DbContext "Server=.\SQLExpress;Database=SchoolDB;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

我相信这可能是因为最初创建于大约 10-15 年前的 database 无法像我希望的那样容易地变成 ORM。它也可能是 versioning 问题,我运行的 scaffolding script 是不正确的,或者如果我只是超出了我的深度,但我希望能指出正确的方向。谢谢!

最佳答案

这个错误通常是因为Primary Key问题。在我的例子中,我正在运行这个查询,结果是你提到的同样的问题

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

我的学生表与其他有关系,而其他之一缺少主键

所以有两种可能的解决方案。

解决方案 1:在您的错误中提到的中创建主键列。

解决方案 2:如果事情很复杂,只需删除 table 并重新创建它。它会很好用

关于.net-core - 导航只能针对带有键的实体类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59950655/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com