У меня есть объект Patient
(хранящий актуальную информацию о пациенте) и объект TreatmentPlanPatient
(копия даты пациента, как это было, когда в «плане лечения» другой объект неотносящиеся к этому вопросу, были созданы):
Я использую Table-per-Type в этом случае.Теперь, когда я пытаюсь добавить новый TreatmentPlanPatient
, который указывает на Patient
, из которого он был создан, EF4 фактически делает это:
- Он извлекает существующего пациента из базы данных
- Создает копию этого пациента
- Назначает ему новый идентификатор GUID (несмотря на StoreGeneratedPattern = нет!)
- Вставляет нового пациента в
Patients
таблицу - ПереписываетИдентификатор в моем
TreatmentPlanPatient
экземпляре, указывающий на этого нового пациента - Вставляет нового пациента плана лечения в таблицу
TreatmentPlanPatients
.
Это мой код, вызывающий вышеуказанное поведение:
using(var container = new SmartTherapyContainer()) {
// Look up the patient in the current container to make sure EF4 recognizes it
var patient = container.Patients.First(r => r.Id == selectedPatient.Id);
var treatmentPlanPatient = new TreatmentPlanPatient() {
Id = Guid.NewGuid(),
FirstName = patient.FirstName,
LastName = patient.LastName,
Street = patient.Street,
ZipCode = patient.ZipCode,
City = patient.City,
BirthDate = patient.BirthDate,
Telephone = patient.Telephone,
Email = patient.Email,
ClonedPatient = patient
};
// EF4 doesn't generate a separate .TreatmentPlanPatients collection :-/
container.Patients.AddObject(treatmentPlanPatient);
container.SaveChanges();
}
Что происходит?Как заставить EF4 просто вставить пациента плана лечения в таблицу TreatmentPlanPatients
и связать его с существующим пациентом в таблице Patients
?