ASP.Net MVC 5 で Entity Framework 6 Model First を使用すると、奇妙な問題が発生します。
私は学生のクラスと家族のクラスを持っています。家族は多くの学生を持つことができます。
問題なく家族を追加できますが、その家族に学生を追加すると、異なるキーを持つ 2 つのレコードが作成されます。
これは私のモデルです:
public partial class Family
{
public Family()
{
this.Students = new HashSet<Student>();
this.Contacts = new HashSet<Contact>();
}
public System.Guid FamilyId { get; set; }
public string PayerType { get; set; }
public bool ProblemAccount { get; set; }
public bool Active { get; set; }
public string CustomId { get; set; }
public string FamilyName { get; set; }
public string Note { get; set; }
public virtual ICollection<Student> Students { get; set; }
public virtual ICollection<Contact> Contacts { get; set; }
}
public partial class Student
{
public Student()
{
this.Phones = new HashSet<Phone>();
this.Addresses = new HashSet<Address>();
this.Classes = new HashSet<Class>();
}
public System.Guid StudentId { get; set; }
public string Name { get; set; }
public string Last { get; set; }
public System.Guid FamilyFamilyId { get; set; }
public string CustomId { get; set; }
public string Email { get; set; }
public bool MassEmail { get; set; }
public string Gender { get; set; }
public string Transportation { get; set; }
public string School { get; set; }
public Nullable<System.DateTime> StartDate { get; set; }
public Nullable<System.DateTime> EndDate { get; set; }
public Nullable<System.DateTime> BirthDate { get; set; }
public bool Active { get; set; }
public string Note { get; set; }
public bool Citizenship { get; set; }
public virtual Family Family { get; set; }
public virtual User User { get; set; }
public virtual ICollection<Phone> Phones { get; set; }
public virtual ICollection<Address> Addresses { get; set; }
public virtual ICollection<Class> Classes { get; set; }
}
これは、学生を追加するための私のコントローラーです:
public async Task<ActionResult> AddNewStudent(Guid FamilyId, NewRegistrationViewModel model)
{
model.Student.StudentId = Guid.NewGuid();
model.Student.FamilyFamilyId = FamilyId;
db.Students.Add(model.Student);
await db.SaveChangesAsync();
return View();
}
重複しないようにする唯一の方法は、StudentId の新しい GUID を生成しないことでした。AddNewStudent Controller の最初の行にコメントを付けると、正常に保存されますが、GUID がなく、もちろんそれは望ましくありません。
このような:
public async Task<ActionResult> AddNewStudent(Guid FamilyId, NewRegistrationViewModel model)
{
//model.Student.StudentId = Guid.NewGuid();
model.Student.FamilyFamilyId = FamilyId;
db.Students.Add(model.Student);
await db.SaveChangesAsync();
return View();
}