2 - Я расследую, чтобы улучшить производительность загрузки. Я только что заметил с SQL Profiler, что «запрос где» использует отложенную загрузку: только один выбор / где для «самого высокого» объекта. Затем я заметил, что AutoMapper делает много выбор / где во время отображения из-за отложенной загрузки. Это не кажется очень эффективным! Поэтому я попробовал методы .Include (many) в основном запросе: это многопользовательский запрос, который мне кажется более эффективным. Но тогда сопоставление все еще делает то же самое количество выбора / где, так что мне интересно, если AutoMapper все еще оправдано?

ько что обновил все приложение 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). Иногда мне нужна ссылка 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 не участвует.

РЕДАКТИРОВАТЬ Я обхожу проблему 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 добавляется в БД

Ответы на вопрос(1)

Ваш ответ на вопрос