2017-08-01 162 views
0

我正在寻找关于EF Core与ASP.NET Core的一些建议。简而言之,我正在寻找解决循环引用的最佳方法。EF核心循环参考ASP.NET核心用户类

基本的前提是:我有一个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处理循环引用没有问题,这似乎不会在应用程序本身内引起任何问题。 问题是在数据库级别我有两个外键在这两个表(AspNetUser和字符)有效地指向对方,这意味着我将无法从数据库中删除任何实体的实例,因为它会违反相应的外键约束。

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

+0

所显示的模型会产生只有一个FK('UserId'在'Character'表),你为什么有两个? –

+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 
} 
+0

含义是'User'属性是'Character'对象的父用户,为什么需要第二个属性? – Telvee32

+0

有用户角色(读取不同的用户)还是让用户拥有不同类型的角色(如角色)? – Wouter

+0

用户有0个或多个字符(读RPG字符表)并且一个字符有一个父用户。 – Telvee32