Номер ошибки: 1785, состояние: 0, класс: 16 Введение ограничения FOREIGN KEY может привести к циклам или нескольким каскадным путям - PullRequest
0 голосов
/ 27 января 2020

Я использую EF Core CodeFirst для создания моей базы данных

Это мои классы сущностей:

public class User
    {
        public int UserId { get; set; }
        public string Name { get; set; }
        public string Lastname { get; set; }
        public string MotherSurname { get; set; }
        public string PhoneNumber { get; set; }
        public string Email { get; set; }
        public virtual List<Friend> FriendsWith { get; set; }
        public virtual List<Friend> FriendsOf { get; set; }
        public virtual List<Post> Posts { get; set; }
        public virtual List<Chat> SentMessages { get; set; }
        public virtual List<Chat> RecievedMessages { get; set; }
    }
public class Chat
    {
        public int ChatId { get; set; }

        public User SenderUser { get; set; }
        public int SenderUserId { get; set; }

        public Message Message { get; set; }
        public int MessageId { get; set; }

        public User TargetUser { get; set; }
        public int TargetUserId { get; set; }
    }
 public class Message
    {
        public int MessageId { get; set; }
        public string MessageToSend { get; set; }

        public Chat Chat { get; set; }
    }
public class Friend
    {
        public int FriendId { get; set; }

        public User User { get; set; }
        public int UserId { get; set; }

        public User FriendUser { get; set; }
        public int FriendUserId { get; set; }

        public bool IsAccepted { get; set; }
    }
    public class Post
    {
        public int PostId { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }

        public User User{ get; set; }
        public int UserId { get; set; }
    }

И контекст I построено:

public class SocialNetworkContext: DbContext
    {
        public SocialNetworkContext(DbContextOptions<SocialNetworkContext> options)
           : base(options)
        {
        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer(@"Server=BOT-JGONZALEZA;Database=SocialNetworkDB;Trusted_Connection=True;");
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Friend>().HasOne(f => f.User).WithMany(u => u.FriendsWith).HasForeignKey(f => f.UserId).OnDelete(DeleteBehavior.NoAction);

            modelBuilder.Entity<Friend>().HasOne(f => f.FriendUser).WithMany(u => u.FriendsOf).HasForeignKey(f => f.FriendUserId).OnDelete(DeleteBehavior.NoAction);

            modelBuilder.Entity<Post>().HasOne(p => p.User).WithMany(u => u.Posts).HasForeignKey(p => p.UserId);

            modelBuilder.Entity<Chat>().HasOne(c => c.SenderUser).WithMany(u => u.SentMessages).HasForeignKey(c => c.SenderUserId).OnDelete(DeleteBehavior.NoAction);

            modelBuilder.Entity<Chat>().HasOne(c => c.TargetUser).WithMany(u => u.RecievedMessages).HasForeignKey(c => c.TargetUserId).OnDelete(DeleteBehavior.NoAction);

            modelBuilder.Entity<Message>().HasOne(m => m.Chat).WithOne(c => c.Message).HasForeignKey<Chat>(c => c.MessageId);

        }

        public DbSet<User> Users { get; set; }
        public DbSet<Post> Posts { get; set; }
        public DbSet<Message> Messages { get; set; }
        public DbSet<Chat> Chats { get; set; }
        public DbSet<Friend> Friends { get; set; }
    }

Когда я пытаюсь update-database, я получаю постоянную ошибку:

Номер ошибки: 1785, Состояние: 0, Класс: 16 Введение ограничения FOREIGN KEY 'FK_Chats_Users_TargetUserId' в таблице 'Чаты' может вызвать циклы или несколько каскадных путей. Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION или измените другие ограничения FOREIGN KEY. Не удалось создать ограничение или индекс. Смотрите предыдущие ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...