EF6 AutoMapper6 Comportamiento diferente de padre / hijo
Acabo de actualizar una aplicación WCF completa de EF4 / AutoMapper 1.1 a EF6 / AutoMapper 6.0.0.2 y el comportamiento no es completamente el mismo.
Esto no funciona para mí:Entity Framework - Agregar entidad secundaria
Antes d :
child.Parent = parentObject
parentObject.Children.Add(child)
tuvo el mismo resultado en tiempo real (durante la depuración == antes de SaveChanges), así que decidí usarchild.Parent = parentObject
para la legibilidad. @child.Parent = parentObject
agregó un elemento secundario en parentObject automáticamente. El niño también fue agregado a la base de datos.
Ahor : child.Parent = parentObject
ya no es suficiente (el elemento secundario no se agrega en la base de datos), tengo que agregar parentObject.Children.Add (elemento secundario). A veces necesito el enlace child.Parent = parentObject, así que tengo que escribir ambas líneas. ¿Alguien puede explicarme por qué ya no funciona?
También: podría escribirantes d :
Mapper.CreateMap< Patient, PATIENTENTITY >()
.ForMember(dest => dest.Gender, opt => opt.ResolveUsing< PatientGenderResolver >())
.ForMember(dest => dest.REF_GENDER, opt => opt.Ignore())
dóndedest.Gender
es PK (int) y PatientGenderResolver encuentra el id (int) del género en la tabla REF_GENDER. Este mapeo fue suficiente para configurar PATIENTENTITY.REF_GENDER en tiempo real gracias a la resolución Id.
Ahor la identificación está configurada pero PATIENTENTITY.REF_GENDER permanece nulo. También traté de configurar directamente PATIENTENTITY.REF_GENDER con un solucionador pero agrega un género en la tabla REF_GENDER ...
Entonces, ¿alguien puede explicarme por qué ya no funciona?
EDITA Algunas precisiones:Antes de
patientEntity = Mapper.PatientToEntity(patientModel);
//patientEntity.REF_GENDER is null
Context.PATIENTENTITIES.AddObject(patientEntity);
//patientEntity.REF_GENDER is set !
Context.SaveChanges();
Ahora
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();
Supongo que los dos problemas que tengo están relacionados
EDITA Acabo de volver a mi proyecto. Ahora tengo EF6 y Automapper 1.1. Los problemas son exactamente los mismos, así que supongo que Automapper no está involucrado.
EDITA Me soluciono el problema de REF_GENDER con
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;
}
Aparentemente, el contexto tiene que ser el mismo; de lo contrario, se agrega un nuevo REF_GENDER a la base de datos