EntityFrameWork Core Ошибка связи «многие ко многим» - PullRequest
1 голос
/ 17 марта 2020

Я не знаю много по-английски sh Lang Но я постараюсь ...

, поэтому у меня есть эта ошибка

Introducing FOREIGN KEY constraint 'FK_Conversation_User_Users_UserID' on table 'Conversation_User' may cause 
cycles or multiple cascade paths.
Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.

и мой код:

AppDB:

    public class AppDB : DbContext
    {
        public AppDB() : base() { }
        public AppDB(DbContextOptions<AppDB> options) : base(options) { }
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer(@"Server=(LocalDB)\MSSQLLocalDB;Database=TetraMessangerDB;Trusted_Connection=True;");
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Conversation_User>().HasKey(cu => new { cu.ConversationID, cu.UserID });
            modelBuilder.Entity<Message_Media>().HasKey(mm => new { mm.MediaID, mm.MessageID });
            modelBuilder.Entity<Participant>().HasKey(p => new { p.UserID, p.GroupID });
        }

        public DbSet<User> Users { get; set; }
        public DbSet<Conversation_User> Conversation_User { get; set; }
        public DbSet<Conversation> Conversation { get; set; }
    }

Пользователь:

    public class User
    {
        public User()
        {
            Participants = new List<Participant>();
            SenMessages = new List<Message>();
            ResMessages = new List<Message>();
        }
        public int UserID { get; set; }
        public string Name { get; set; }
        public string Password { get; set; }
        public string Bio { get; set; }
        public string EMail { get; set; }
        public string UserName { get; set; }
        public bool Activate { get; set; }
        public int MediaID { get; set; }
        public virtual Media Media { get; set; }

        public virtual UserStatus UserStatus { get; set; }

        public virtual List<Participant> Participants { get; set; }

        [InverseProperty("SenderUser")]
        public virtual List<Message> SenMessages { get; set; }

        [InverseProperty("ReciverUser")]
        public virtual List<Message> ResMessages { get; set; }

        public virtual List<Conversation_User> Conversation_User { get; set; }
    }

Разговор:

    public class Conversation
    {
        public Conversation()
        {
            Conversation_User = new List<Conversation_User>();
        }
        public int ConversationID { get; set; }
        public DateTime StartDate { get; set; }
        public int MediaID { get; set; }
        public virtual Media Media { get; set; }

        public virtual List<Conversation_User> Conversation_User { get; set; }
    }

Conversation_User:

public class Conversation_User
{
    public int ConversationID { get; set; }
    public virtual Conversation Conversation { get; set; }
    public int UserID { get; set; }
    public virtual User User { get; set; }
}

, поэтому я вижу много тот же вопрос, но я не понимаю ...

У меня нет многократного пути, так почему я получаю эту ошибку.

Может ли какое-то тело объяснить это.

Примечание : У меня много сущностей с такой же проблемой в отношениях «многие ко многим», но если я смогу решить эту проблему, я пойму, как решить их.

и спасибо за помощь.

Редактировать : Я пробовал это, но все еще получаю то же самое

    modelBuilder.Entity<Conversation_User>()
        .HasOne(pt => pt.User)
        .WithMany(p => p.Conversation_User)
        .HasForeignKey(pt => pt.UserID)
        .IsRequired()
        .OnDelete(DeleteBehavior.NoAction);

    modelBuilder.Entity<Conversation_User>()
        .HasOne(pt => pt.Conversation)
        .WithMany(p => p.Conversation_User)
        .HasForeignKey(pt => pt.ConversationID)
        .IsRequired()
        .OnDelete(DeleteBehavior.NoAction);
...