我有两个对象:用户和关系。每个用户在我的系统中都会创建一个用户对象,根据他们添加的朋友数量,将为每个用户创建多个关系。这些对象如下所示。
每个用户可能有多条记录与
public class User : IdentityUser {}
public class Relationship {
// User who created the relationship
public User User {get;set;}
// User who the creation user is friends with
public User Friend {get;set;}
// Enum of Status (Approved, Pending, Denied, Blocked)
public RelationshipStatus RelationshipStatus {get;set;}
public DateTime RelationshipCreationDate {get;set;}
}
每个用户可能有多条记录与
Relationship.User
匹配,也可能有多条记录与Relationship.Friend
匹配。在OnModelCreating
方法中,我已经按照以下方式设置了我的DbContext:protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Relationship>(relationship =>
{
relationship.HasOne(r => r.User).WithMany(u => u.Friends);
});
}
我对Entity不太熟悉,所以这可能很简单——我错过了什么,才能按照我描述的设置关系?谢谢!
编辑:更具体地说,这是我得到的错误:
InvalidOperationException: 无法确定导航属性“User”的关系表示方式。“Relationship.Friend”类型。请手动配置关系,或使用“[NotMapped]”属性或在“OnModelCreating”中使用“EntityTypeBuilder.Ignore”忽略此属性
编辑2:重新思考我的过程后,我采取了不同的方法,并使用关系来包括追随者和追随者,而不是一个集体的朋友列表(这样更符合我的业务模型)。我使用以下方式实现了这一点:
public class User : IdentityUser {
[InverseProperty("Friend")]
public List<Relationship> Followers {get;set;}
[InverseProperty("User")]
public List<Relationship> Following {get;set;}
}
我很好奇除了我的解决方案以外,还有没有其他人能够提供原问题的解决方案,不过目前这个方案可以使用并且似乎最适合我。