首页 > 解决方案 > 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();

非常感谢

标签: c#asp.netentity-framework-core

解决方案


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; } 
 }

推荐阅读