ASP.NET Core用户类的EF Core循环引用

时间:2017-08-01 08:25:34

标签: c# asp.net-core entity-framework-core

我正在寻找有关使用ASP.NET Core的EF Core的一些建议。简而言之,我正在寻找解决循环引用的最佳方法。

基本前提是:我有一个User对象,其中包含一个Character对象的ICollection,每个Character对象都包含一个关联的用户。

public class ApplicationUser : IdentityUser
{       
    public ICollection<Character> Characters { get; set; }
}
public class Character
{
    public Guid Id { get; set; }

    [Required]
    public ApplicationUser User { get; set; }

    // other properties
}

这似乎不会导致应用程序本身出现任何问题,因为EF处理循环引用没有问题。 问题是在DB级别我在这两个表(AspNetUser和Characters)上有两个外键有效地指向对方,这意味着我将无法从数据库中删除任一实体的实例,因为它会违反相应的外部关键约束。

我对ASP.NET Core有点新鲜,所以我可能会错过一些关于如何处理用户的约定或其他约定。 从应用程序的角度来看,我有一个页面,它只显示一个字符列表以及相关用户的用户名。我目前认为最好从Character类中删除User属性并将其替换为UserId属性(并具有应用程序逻辑以将正确的用户拉出UserManager),但我不是确定这会摆脱循环外键约束。

1 个答案:

答案 0 :(得分:0)

您需要将父用户添加到角色(一对多关系)并使您的收藏虚拟:

public class ApplicationUser : IdentityUser
{       
    public virtual ICollection<Character> Characters { get; set; }
}
public class Character
{
    public Guid Id { get; set; }

    public string ParentId { get; set; }

    public string UserId { get; set; }

    [Required]
    [ForeignKey("ParentId")]
    public virtual ApplicationUser Parent { get; set; }

    [Required]
    [ForeignKey("UserId")]
    public virtual ApplicationUser User { get; set; }

    // other properties
}