Сопоставить обнуляемый объект - PullRequest
0 голосов
/ 08 марта 2011

Я пытаюсь сопоставить идентификатор объекта с AutoMapper, и я пытался выяснить это в течение двух дней.Любая помощь будет оценена.

Вот мои объекты домена:

public class Entity
{
    public virtual Guid Id { get; protected set; }
}

public class Customer : Entity
{
    public virtual User SalesPerson { get; set; }
}

public class User : Entity
{
    public virtual string Email { get; set; }
}

Вот модель редактирования, которую я использую.Менеджер по продажам - это выпадающий список пользователей с опцией «Нет» (value=""), поскольку у клиента может не быть продавца.

public class CustomerEditModel
{
    [DisplayName("Sales Person")]
    public Guid? SalesPerson { get; set; }
}

И вот здесь я застрял.Это сопоставления, которые я пытался до сих пор связать с моделью редактирования обратно в модель предметной области:

cfg.CreateMap<CustomerEditModel, Customer>()
    .ForMember(d => d.SalesPerson, o => o.ResolveUsing<EntityResolver<User>>().FromMember(s => s.SalesPerson));

cfg.CreateMap<CustomerEditModel, Customer>()
    .ForMember(d => d.SalesPerson, o => o.MapFrom(s => s.SalesPerson.HasValue ? s.SalesPerson.Value : null);

cfg.CreateMap<CustomerEditModel, Customer>()
    .ForMember(d => d.SalesPerson, o => o.MapFrom(s => s.SalesPerson != null ? s.SalesPerson : null));

public class EntityResolver<T> : ValueResolver<Guid, T>
    where T : Entity
{
    protected override T ResolveCore(Guid source)
    {
        return session.Get<T>(source, LockMode.None);
    }
}

1 Ответ

0 голосов
/ 08 марта 2011

Я внес следующие изменения, и кажется, что все работает как положено.

public class EntityResolver<id, entity> : ValueResolver<id, entity>
    where entity : Entity
{
    protected override entity ResolveCore(id source)
    {
        if (source != null)
            return session.Get<entity>(source, LockMode.None);
        else
            return null;
    }
}

...

cfg.CreateMap<CustomerEditModel, Customer>()
    .ForMember(d => d.SalesPerson, o => o.ResolveUsing<EntityResolver<Guid?, User>>().FromMember(s => s.SalesPerson));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...