通常在EF中你可以使用
ApplicationUser User { get; set; }
定义与属性的用户关系。但是我觉得如何对两个用户之间的属性进行混淆,如果这有意义的话?基本上我想为用户之间的关系定义一个模型,例如
UserA和UserB具有以下关系:
bool Friends { get; set; }
bool Blocked { get; set; }
我也想知道如何为这个“封锁”属性建模它。因为我希望两者能够相互阻挡并解锁。例如UserA阻止UserB。然后他决定取消阻止,因此Blocked属性从true变为false。但如果UserB也阻止了UserA,则该属性仍为真。
编辑28/07
public class ApplicationUser : IdentityUser
{
...
public virtual ICollection<UserRelationships> Relationships { get; set; }
}
public class UserRelationships
{
public int UserRelationshipsId { get; set; }
public UserRelationships() { this.Friends = false; this.Blocked = false; }
public List<ApplicationUser> Users { get; set; }
public bool Friends { get; set; }
public bool Blocked { get; set; }
public string Blocker { get; set; }
public string SecondBlocker { get; set; }
}
答案 0 :(得分:1)
你可以在EF中进行多对多(纯连接),但它只能跟踪左右ID,没有别的。所以,如果你想审计友谊或阻止的时间,你必须在另一个表中这样做。
相反,我建议您使用以下结构:
public class ApplicationUserRelationship
{
public virtual ApplicationUser LeftUser { get; set; }
public virtual ApplicationUser RightUser { get; set; }
public virtual RelationshipType RelationshipType { get; set; }
public virtual DateTime? CreatedDateTime { get; set; }
public virtual DateTime? UpdatedDateTime { get; set; }
...
}
您当然可以使用RelationshipType
或string
替换bool
(IsFriend
,IsBlocked
)或{{1}如果有意义的话。
在enum
中,您现在拥有:
ApplicationUser
然后流利地说:
public virtual ICollection<ApplicationUserRelationship> ApplicationUserRelationships { get; set; }