Saya baru saja memperbarui seluruh aplikasi WCF dari EF4/AutoMapper 1.1 ke EF6/AutoMapper 6.0.0.2 dan perilakunya tidak sepenuhnya sama.
Ini tidak berhasil untuk saya: Kerangka Kerja Entitas - Tambahkan Entitas Anak
Sebelum :
child.Parent = parentObject
OR
parentObject.Children.Add(child)
memiliki hasil yang sama secara real time (saat debugging == sebelum SaveChanges), jadi saya memutuskan untuk menggunakan child.Parent = parentObject
agar mudah dibaca. child.Parent = parentObject
menambahkan anak di parentObject secara otomatis. Anak itu juga ditambahkan ke db.
Sekarang : child.Parent = parentObject
tidak cukup lagi (anak tidak ditambahkan di db), saya harus menambahkan parentObject.Children.Add(child). Terkadang saya membutuhkan link child.Parent = parentObject, jadi saya harus menulis kedua baris tersebut. Dapatkah seseorang menjelaskan kepada saya mengapa itu tidak berfungsi lagi?
Juga : Saya bisa menulis sebelum :
Mapper.CreateMap< Patient, PATIENTENTITY >()
.ForMember(dest => dest.Gender, opt => opt.ResolveUsing< PatientGenderResolver >())
.ForMember(dest => dest.REF_GENDER, opt => opt.Ignore())
di mana dest.Gender
adalah PK(int) dan PatientGenderResolver temukan id(int) Gender di tabel REF_GENDER. Pemetaan ini cukup untuk menyetel PATIENTENTITY.REF_GENDER secara real-time berkat penyelesai Id.
Sekarang id telah disetel tetapi PATIENTENTITY.REF_GENDER tetap nol. Saya juga mencoba mengatur langsung PATIENTENTITY.REF_GENDER dengan penyelesai tetapi menambahkan Gender di tabel REF_GENDER...
Jadi sekali lagi, bisakah seseorang menjelaskan kepada saya mengapa itu tidak berfungsi lagi?
EDIT Beberapa presisi : Sebelum :
patientEntity = Mapper.PatientToEntity(patientModel);
//patientEntity.REF_GENDER is null
Context.PATIENTENTITIES.AddObject(patientEntity);
//patientEntity.REF_GENDER is set !
Context.SaveChanges();
Sekarang :
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();
Dugaan saya adalah kedua masalah yang saya alami saling berkaitan
EDIT Saya baru saja kembali mengerjakan proyek saya. Saya sekarang memiliki EF6 dan Automapper 1.1. Masalahnya sama persis jadi saya kira Automapper tidak terlibat.
EDIT Saya mengatasi masalah 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;
}
Tampaknya, konteksnya harus sama jika tidak, REF_GENDER baru akan ditambahkan ke db