私はEFコードの最初のデータベースをmigrationsフォルダの設定ファイルにシードしようとしていますが、どういうわけか、関連するデータベースへの新しいエントリ。EF 6.1.3多対多関係をシードする方法
私は以下のデータベース構造を持っています。
public class ClassSchedule
{
public int Id { get; set; }
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
public virtual Class Classes { get; set; }
public virtual Classroom Classrooms { get; set; }
}
public class Class
{
public Class()
{
this.Students = new HashSet<Student>();
this.ClassSchedules = new HashSet<ClassSchedule>();
}
public int Id { get; set; }
public int LevelId { get; set; }
[StringLength(50)]
public string ClassName { get; set; }
public int MaxStudents { get; set; }
public virtual Level Levels { get; set; }
public ICollection<Student> Students { get; set; }
public ICollection<ClassSchedule> ClassSchedules { get; set; }
}
public class Classroom
{
public Classroom()
{
this.ClassSchedules = new HashSet<ClassSchedule>();
}
public int Id { get; set; }
public string ClassRoomName { get; set; }
public int MaxStudents { get; set; }
public ICollection<ClassSchedule> ClassSchedules { get; set; }
}
そして、私の移行構成ファイルに次のコードを持っている:
// all classrooms
context.Classrooms.Add(new Classroom() { ClassRoomName = "Cherry", MaxStudents = 20 });
context.Classrooms.Add(new Classroom() { ClassRoomName = "Pear", MaxStudents = 12 });
context.Classrooms.Add(new Classroom() { ClassRoomName = "Apple", MaxStudents = 12 });
// classes
context.Classes.Add(new Class() { ClassName = "YR1", MaxStudents = 12, LevelId = 1 });
context.Classes.Add(new Class() { ClassName = "YB1", MaxStudents = 6, LevelId = 3 });
context.Classes.Add(new Class() { ClassName = "IELTS L1", MaxStudents = 40, LevelId = 14 });
今私が何をしたいのか、このようなものです:
// ClassRoom schedules, links the class and classroom on a certain time
context.ClassSchedules.Add(new ClassSchedule() { StartTime = DateTime.Parse("2017-09-17T18:00:00"), EndTime = DateTime.Parse("2017-09-17T20:00:00"), Classes = 1, Classrooms = 1 });
私が試したもう一つでした。
context.ClassSchedules.Add(new ClassSchedule() { StartTime = DateTime.Parse("2017-09-17T18:00:00"), EndTime = DateTime.Parse("2017-09-17T20:00:00"), Classes = { Id = 1 }, Classrooms = { Id = 2 } });
これはうまく動作しません。また、new Classes() { Id = 1 }
を使用することができないことに注意してください。これにより、新しいエンティティが作成されます。
何か助けていただければ幸いです!
まずはお手伝いをしていただきありがとうございます。私は解決策を試してみましたが、「classSchedule1.Classrooms.Add()」メソッドはICollectionタイプでは使用できないといっても不思議はありません。私はここでICollectionを使用して間違いを犯しましたか? –
私はプロパティ名に惑わされました。 'Classes'は複数形ですが、タイプには注意を払っていません。それは単なるクラスです。 –