c# - Entity Framework Core 1:n 关系导致循环
问题描述
我正在使用 EF Core 内存数据库。我对外键(导航属性)的定义有疑问。一个用户可以有多个令牌。所以我的用户表被调用Benutzer
,我的令牌表被调用RefreshToken
:
public class Benutzer
{
[Key]
public int BenutzerId { get; set; }
public string AnmeldeName { get; set; }
public string Passwort { get; set; }
public string BevorzugteSprache { get; set; }
public byte[] Salt { get; set; }
[NotMapped]
public int Iterationen { get => 10000; }
// Navigation property
// [ForeignKey("BenutzerId")]
public virtual List<RefreshToken> RefreshTokens { get; set; }
}
public class RefreshToken
{
[Key]
public int RefreshTokenId { get; set; }
public string Token { get; set; }
// Navigation property
public virtual Benutzer Benutzer { get; set; } // <-- caused a loop
[ForeignKey("BenutzerId")]
public int BenutzerId { get; set; }
}
如果没有 table 中的导航属性RefreshToken
,它会部分工作。我可以为用户添加令牌。如果我请求用户表,我会得到附加的令牌。但我可以添加一个BenutzerId
不存在的令牌。
现在我将导航属性添加到RefreshToken
表中,请参见上面的代码。这导致了一个循环。
如果我请求用户表,我会得到附加的令牌,这个附加用户等等。此外,我可以添加一个不存在用户的令牌。
怎么了?
var list = await _dbContext.Set<Benutzer>().ToListAsync();
非常感谢
解决方案
You appear to be missing the action navigation property, you have the FK but not the entity:
public class RefreshToken
{
[Key]
public int RefreshTokenId { get; set; }
public string Token { get; set; }
// Navigation property
public Benutzer Benutzer {get;set;} <<<<<<<<
[ForeignKey("BenutzerId")]
public int BenutzerId { get; set; }
}
推荐阅读
- sql-server - Visual Studio 的连接管理器 OLE DB 目标编辑器中缺少“新建”按钮
- javascript - 在 map 函数中异步调用 API (React)
- grails - grails 3.3.10 设置 server.connection-timeout 后未超时
- azure - 在 terraform for Azure 中创建 VPC 的语法是什么?
- flutter - Flutter web passwordless login does not trigger auth state change
- windows - Inno Setup:创建自定义表单
- amazon-web-services - 使用 AWS CLI 返回 _all_ ip 地址列表
- python - 显示额外的精灵?
- azure - 在 Azure Devops 预定义变量中访问 github 用户名
- amazon-s3 - 尝试使用 Ghost S3 存储时出现权限错误,兼容模式