Нужно реализовать возможность системы подписок с помощью ef core 3.1
Имеется два класса,один с юзерами другой с подписками,каждый юзер может быть и публикатором и подписчиком соответственно. В настройке связи many-to-many проблем нет,но вот при настройке удаления компилятор ссылается на multiply cascade paths. Если поставить одно из свойств на Restrict база данных инициализируется,но при удалении юзера ключ которого есть в restrict поле происходит та же ошибка.
Как изменить код или структуру таблиц чтоб сделать возможным подписку юзеров,а также правильное удаление всех связанных записей при удалении самого юзера?
Сущность юзера:
public class User
{
public int Id { get; set; }
public int HashCode { get; set; }
public ICollection<Subscribe> Followers { get; set; }
public ICollection<Subscribe> Publishers { get; set; }
public User()
{
Publishers = new List<Subscribe>();
Followers = new List<Subscribe>();
}
}
Сущность подписок:
public class Subscribe
{
public int Id { get; set; }
public int FollowerId { get; set; }
public User Follower { get; set; }
public int PublisherId { get; set; }
public User Publisher { get; set; }
}
Контекст базы данных(здесь основная проблема):
public class MDContext : DbContext
{
public DbSet<User> Users { get; set; }
public DbSet<Subscribe> Subscribes { get; set; }
public MDContext(DbContextOptions<MDContext> options)
: base(options)
{
Database.EnsureDeleted();
//На данном этапе разработки удаление базы не страшно
Database.EnsureCreated();
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Subscribe>().HasKey(s => new { s.FollowerId, s.PublisherId });
modelBuilder.Entity<Subscribe>()
.HasOne(s => s.Follower)
.WithMany(f => f.Publishers)
.HasForeignKey(s => s.FollowerId)
.OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<Subscribe>()
.HasOne(s => s.Publisher)
.WithMany(p => p.Followers)
.HasForeignKey(s => s.PublisherId)
.OnDelete(DeleteBehavior.Restrict);
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Нахожусь в начале пути освоения C#Пока весьма мутно представляю его возможности в полной мере
Знаю что сборщик мусора очищает только управляемые типы в управляемой кучеДля неуправляемых есть интерфейс IDisposable
сделал метод Cycle и все переменные статическими, чтобы можно было вызывать без создания объекта класса Program