У меня есть два объекта: Пользователь и Отношения.Пользовательский объект создается для каждого пользователя моей системы, и для каждого пользователя будет создано несколько отношений в зависимости от того, сколько людей они добавят в друзья.Объекты выглядят следующим образом
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
.У меня есть моя настройка DbContext следующим образом в методе OnModelCreating
:
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Relationship>(relationship =>
{
relationship.HasOne(r => r.User).WithMany(u => u.Friends);
});
}
Я новичок в Entity, так что это, вероятно, тривиально - Чего мне не хватает, чтобы настроить отношения, как я описал?Спасибо!
Редактировать: Чтобы быть более конкретным, вот ошибка, которую я получаю:
InvalidOperationException: Unable to determine the relationship represented by navigation property 'Relationship.Friend' of type 'User'. Either manually configure the relationship, or ignore this property using the '[NotMapped]' attribute or by using 'EntityTypeBuilder.Ignore' in 'OnModelCreating'
Редактировать 2: После переосмысления моего процесса, я взялдругой подход и использовал отношения, чтобы включать в себя подписчиков и подписчиков, а не коллективный список друзей (в любом случае лучше подходит для моей бизнес-модели).Я добился этого с помощью следующего:
public class User : IdentityUser {
[InverseProperty("Friend")]
public List<Relationship> Followers {get;set;}
[InverseProperty("User")]
public List<Relationship> Following {get;set;}
}
Мне любопытно, есть ли у кого-нибудь решение исходной проблемы за пределами моего решения, однако пока это работает и, кажется, подходит мне лучше всего.