Самостоятельная ссылка с тем же классом - PullRequest
1 голос
/ 19 сентября 2019

У меня есть класс с именем «ApplicationUser», у этого класса есть свойство, называемое последователи, такого же типа, как этот:

public class ApplicationUser : IdentityUser<Guid>
{
    public string FcmToken { get; set; }
    public bool NotificationEnabled { get; set; }
    public List<ApplicationUser> Followers { get; set; }
    public List<ApplicationUser> Follows { get; set; }
}

и в моем ApplicationDbContext в методе «OnModelCreating» выглядит так:

protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<ApplicationUser>().HasMany(s => s.Followers).WithMany().Map(m =>
        {

        });           

        base.OnModelCreating(modelBuilder);
    }

ошибка в .WithMany (), он говорит: «Пользователь приложения не содержит определения для WithMany»

Я видел учебные пособия по самоссылке, и этоспособ сделать это с помощью Entity Framework 7, но я не нашел способ сделать это с помощью .net core 2.2. Любая помощь будет полезна для меня.Большое спасибо.

1 Ответ

0 голосов
/ 19 сентября 2019

EF Core фактически не поддерживает отношения «многие ко многим».Обходной путь - использовать промежуточную сущность для объединения двух сторон, так что между каждой стороной отношения и этим промежуточным классом существует один ко многим.Другими словами:

public class ApplicationUserFollower
{
    public ApplicationUser Follower { get; set; }
    public ApplicationUser Followee { get; set; }
}

Затем на ApplicationUser:

public class ApplicationUser : IdentityUser
{
    ...

    public ICollection<ApplicationUserFollower> Following { get; set; }
    public ICollection<ApplicationUserFollower> Followers { get; set; }
}

Наконец, в вашем свободном конфиге:

modelBuilder.Entity<ApplicationUser>().HasMany(s => s.Following).WithOne(x => x.Follower);
modelBuilder.Entity<ApplicationUser>().HasMany(s => s.Followers).WithOne(x => x.Followee);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...