У меня проблема с отображением очень распространенной связи NxM с помощью EF Core 8.
Давайте упростим. Это классы сущностей
Код: Выделить всё
public sealed class Student {
private readonly List _classes;
public int StudentId { get; set; }
public string Name { get; set; }
public IReadOnlyCollection Classes {
get {
return _classes;
}
}
public void AddClass(Class entity) {
_classes.Add(entity);
}
}
public sealed class Class {
private readonly List _students;
public int ClassId { get; set; }
public string Name { get; set; }
public IReadOnlyCollection Students {
get {
return _students;
}
}
public void AddStudent(Student entity) {
_students.Add(entity);
}
}
Код: Выделить всё
public sealed class StudentClass {
public int StudentId { get; set; }
public int ClassId { get; set; }
}
Код: Выделить всё
//Student
builder
.HasMany(x => x.Classes)
.WithMany(x => x.Students)
.UsingEntity(
"StudentClasses",
l => l
.HasOne()
.WithMany()
.HasForeignKey(r => r.ClassId)
.HasPrincipalKey(r => r.StudentId)
.IsRequired(),
r => r
.HasOne()
.WithMany()
.HasForeignKey(u => u.ClassId)
.HasPrincipalKey(u => u.StudentId)
.IsRequired(),
j => {
j.HasKey(ur => new { ur.StudentId, ur.ClassId });
j.ToTable(TableNames.StudentClassTableName);
}
);
//Class
builder
.HasMany(x => x.Students)
.WithMany(x => x.Classes)
.UsingEntity(
"StudentClasses",
l => l
.HasOne()
.WithMany()
.HasForeignKey(r => r.StudentId)
.HasPrincipalKey(r => r.ClassId)
.IsRequired(),
r => r
.HasOne()
.WithMany()
.HasForeignKey(u => u.StudentId)
.HasPrincipalKey(u => u.ClassId)
.IsRequired(),
j => {
j.HasKey(ur => new { ur.StudentId, ur.ClassId });
j.ToTable(TableNames.StudentClassTableName);
}
);
Код: Выделить всё
public void RegisterToClass(Student student, Class class) {
student.AddClass(class);
}
Есть предложения?
Подробнее здесь: https://stackoverflow.com/questions/791 ... licate-key
Мобильная версия