Я только что обновил все приложение WCF с EF4 / AutoMapper 1.1 до EF6 / AutoMapper 6.0.0.2 , и поведение не совсем то же самое.
Этоне работает для меня: Entity Framework - Добавить дочернюю сущность
До :
child.Parent = parentObject
ИЛИ
parentObject.Children.Add(child)
имел тот же результат в режиме реального времени (при отладке == до SaveChanges), поэтому я решил использовать child.Parent = parentObject
для удобства чтения.child.Parent = parentObject
автоматически добавляет дочерний элемент в parentObject.Дочерний объект также был добавлен в БД.
Теперь : child.Parent = parentObject
больше не достаточно (дочерний элемент не добавлен в БД), я должен добавить parentObject.Children.Add (ребенок).Иногда мне нужна ссылка child.Parent = parentObject, поэтому я должен написать обе строки.Может кто-нибудь объяснить мне, почему он больше не работает?
Также: я мог бы написать до :
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 найти идентификатор (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 не задействован.
EDIT Я обхожу проблему 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