我试图创建一个学校管理系统使用.NET WPF应用程序。我的数据库是用EFCore 6,Code-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。
我在网上找不到什么有用的东西
1条答案
按热度按时间b4wnujal1#
对于多对多关系,您必须创建另一个包含这两个表模型。
注意:在创建关系之前,您必须删除表中的所有数据。因为如果有数据不能匹配的关系,那么它会显示错误