ฉันเพิ่งอัปเดตแอป WCF ทั้งหมดจาก EF4 / AutoMapper 1.1 เป็น EF6 / AutoMapper 6.0.0.2 และลักษณะการทำงานไม่เหมือนเดิมทั้งหมด
สิ่งนี้ใช้ไม่ได้สำหรับฉัน: Entity Framework - เพิ่ม Child Entity
ก่อน :
child.Parent = parentObject
OR
parentObject.Children.Add(child)
ได้ผลเหมือนกันแบบเรียลไทม์ (ขณะทำการดีบั๊ก == ก่อน SaveChanges) ดังนั้นฉันจึงตัดสินใจใช้ child.Parent = parentObject
เพื่อให้อ่านง่าย child.Parent = parentObject
เพิ่มลูกใน parentObject โดยอัตโนมัติ เด็กยังถูกเพิ่มเข้าไปใน db ด้วย
ตอนนี้ : child.Parent = parentObject
ไม่เพียงพออีกต่อไป (ไม่ได้เพิ่มลูกใน db) ฉันต้องเพิ่ม parentObject.Children.Add(child) บางครั้งฉันต้องการลิงก์ child.Parent = parentObject ดังนั้นฉันจึงต้องเขียนทั้งสองบรรทัด ใครช่วยอธิบายให้ฉันฟังได้ไหมว่าทำไมมันไม่ทำงานอีกต่อไป
นอกจากนี้ : ฉันสามารถเขียน before :
Mapper.CreateMap< Patient, PATIENTENTITY >()
.ForMember(dest => dest.Gender, opt => opt.ResolveUsing< PatientGenderResolver >())
.ForMember(dest => dest.REF_GENDER, opt => opt.Ignore())
โดยที่ dest.Gender
คือ PK(int) และ PatientGenderResolver ค้นหา id(int) ของเพศในตาราง REF_GENDER การแมปนี้เพียงพอที่จะตั้งค่า PATIENTENTITY.REF_GENDER แบบเรียลไทม์ด้วยตัวแก้ไขรหัส
ตอนนี้ ID ถูกตั้งค่าแล้ว แต่ PATIENTENTITY.REF_GENDER ยังคงเป็นโมฆะ นอกจากนี้ฉันพยายามตั้งค่า PATIENTENTITY.REF_GENDER โดยตรงด้วยตัวแก้ไข แต่มันเพิ่มเพศในตาราง REF_GENDER...
อีกครั้งมีใครสามารถอธิบายให้ฉันฟังได้ไหมว่าทำไมมันถึงไม่ทำงานอีกต่อไป
แก้ไข ความแม่นยำบางประการ : ก่อน :
patientEntity = Mapper.PatientToEntity(patientModel);
//patientEntity.REF_GENDER is null
Context.PATIENTENTITIES.AddObject(patientEntity);
//patientEntity.REF_GENDER is set !
Context.SaveChanges();
ตอนนี้ :
patientEntity = Mapper.PatientToEntity(patientModel);
//patientEntity.REF_GENDER is null
Context.PATIENTS.Add(patientEntity);
//patientEntity.REF_GENDER is still null !
//patientEntity.REF_GENDER = Context.REF_GENDER.Find(patientEntity.Gender);//I am obliged to add this line everywhere for every REF !
Context.SaveChanges();
ฉันเดาว่าปัญหาทั้งสองที่ฉันมีมีความเกี่ยวข้องกัน
แก้ไข ฉันเพิ่งย้อนกลับไปในโครงการของฉัน ตอนนี้ฉันมี EF6 และ Automapper 1.1 แล้ว ปัญหาก็เหมือนกันทุกประการ ดังนั้นฉันเดาว่า Automapper จะไม่เกี่ยวข้อง
แก้ไข ฉันแก้ไขปัญหา REF_GENDER ด้วย
patientEntity = Mapper.PatientToEntity(patientModel, Context);
public PATIENT PatientToEntity(Patient patient, EntityContainer context)
{
PATIENT entity = AutoMapper.Mapper.Map<Patient, PATIENT>(patient);
if (patient.Id == null || patient.Id == Guid.Empty)
entity.PatientId = Guid.NewGuid();
else
entity.PatientId = patient.Id;
entity.REF_GENDER = context.REF_GENDER.Find(entity.Gender);
return entity;
}
เห็นได้ชัดว่าบริบทจะต้องเหมือนกัน ไม่เช่นนั้นจะมีการเพิ่ม REF_GENDER ใหม่ลงใน db