mysql 如何在EFCore 6 Code-First中为多对多关系更新连接表?

11dmarpk  于 2023-05-21  发布在  Mysql
关注(0)|答案(1)|浏览(136)

我试图创建一个学校管理系统使用.NET WPF应用程序。我的数据库是用EFCore 6Code-First构建的。
我有两个类,它们之间存在多对多关系。

`public class Subject
{ 
    public int Id { get; set; }
    public string Name { get; set; }
    
    public ICollection<Specialization> Specializations { get; set; } = null!;

    public Subject()
    {
        
    }
}

public class Specialization
{
    public int Id { get; set; }
    public string Name { get; set; }

    public ICollection<Subject> Subjects { get; set; } = null!;
    

    public Specialization() {
        Id = 0;
        Name = string.Empty;
    }
}```

我还使用DbContext的模型构建器配置了关系://专业化主题modelBuilder.Entity<Specialization>() .HasMany(e => e.Subjects) .WithMany(e => e.Specializations) .UsingEntity( "SpecializationSubject", l => l.HasOne(typeof(Subject)).WithMany().HasForeignKey("SubjectId").HasPrincipalKey(nameof(Subject.Id)), r => r.HasOne(typeof(Specialization)).WithMany().HasForeignKey("SpecializationId").HasPrincipalKey(nameof(Specialization.Id)), j => j.HasKey("SpecializationId", "SubjectId"));
这在我的数据库中创建了一个specializationsubject表,其中包含一个SpecializationId和一个SubjectId。
我已手动将一些专业化认证添加到数据库中。现在,当我尝试从UI添加新的Subject时,如果Subject类中的ICollection of Specializations不为空,则会出现以下错误:MySqlException:关键字“专业化. PRIMARY”的重复条目“% 1”。
我希望在添加链接到现有专业化的新主题时更新表specializationsubject
我在网上找不到什么有用的东西

b4wnujal

b4wnujal1#

对于多对多关系,您必须创建另一个包含这两个表模型。

public class SpecializedSubject
{
  public int SubjectId { get; set; }
  public int SpecializationId { get; set; }

  public Subject SubjectObj { get; set; } = null;
  public Specialization SpecializationObj{ get; set; } = null;

}

注意:在创建关系之前,您必须删除表中的所有数据。因为如果有数据不能匹配的关系,那么它会显示错误

相关问题