我正在寻找有关使用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),但我不是确定这会摆脱循环外键约束。
答案 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
}