私の Entity Framework 4 モデル (MS SQL Server Express で動作する) には、Patient-PatientDevice-Device という多対多の関係があります。私は Poco を使用しているので、PatientDevice クラスは次のようになります。
public class PatientDevice
{
protected virtual Int32 Id { get; set; }
protected virtual Int32 PatientId { get; set; }
public virtual Int32 PhysicalDeviceId { get; set; }
public virtual Patient Patient { get; set; }
public virtual Device Device { get; set; }
//public override int GetHashCode()
//{
// return Id;
//}
}
私がこれを行うと、すべてうまくいきます:
var context = new Entities();
var patient = new Patient();
var device = new Device();
context.PatientDevices.AddObject(new PatientDevice { Patient = patient, Device = device });
context.SaveChanges();
Assert.AreEqual(1, patient.PatientDevices.Count);
foreach (var pd in context.PatientDevices.ToList())
{
context.PatientDevices.DeleteObject(pd);
}
context.SaveChanges();
Assert.AreEqual(0, patient.PatientDevices.Count);
しかし、PatientDevice クラスの GetHashCode のコメントを外すと、患者には以前に追加された PatientDevice がまだ残っています。
GetHashCode をオーバーライドして ID を返す際の何が問題になっていますか?