私はグループや学生と多対多の関係を築こうとしているので、学生は多くのグループに割り当てられ、グループには多くの学生を割り当てることができます。context.savechanges()を呼び出すと、エラーが発生し続けます。私のオブジェクトには、適切な構成があり、両方に仮想ICollectionがあります。私の構成は次のとおりです。
public class DataContext : DbContext
{
public DbSet<Student> StudentsContext { get; set; }
public DbSet<Group> GroupsContext { get; set; }
public DbSet<Phase> PhaseContext { get; set; }
public DbSet<Admin> AdminContext { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Student>()
.HasMany(g => g.Groups)
.WithMany(s => s.GroupMembers)
.Map(x => x.MapLeftKey("StudentId")
.MapRightKey("GroupId")
.ToTable("Student_XRef_Group"));
}
}
次に、コントローラーでテストと同じように試してみます。
var phase = phaseRepository.Select().SingleOrDefault(x => x.PhaseId == phaseId);
phase.Groups.Clear();
//Testing
Group testGroup = new Group();
testGroup.GroupNumber = 1;
testGroup.GroupMembers.Add(AllStudents[0]); //Students of type Student
phase.Groups.Add(testGroup);
//Testing
context.SaveChanges();
次に、context.savechangesに到達すると、次のエラーが発生します。
操作が失敗しました:1つ以上の外部キープロパティがnull許容でないため、関係を変更できませんでした。リレーションシップに変更が加えられると、関連する外部キープロパティがnull値に設定されます。外部キーがnull値をサポートしていない場合は、新しい関係を定義するか、外部キープロパティに別の非null値を割り当てるか、無関係のオブジェクトを削除する必要があります。
**解決済み**phase.Groups.clear()を呼び出すことが問題だったことがわかりました。なぜ、私にはわかりません。多分今理由を教えてくれると思っていましたか?