Отображение int (Id) на экземпляр Model - PullRequest
0 голосов
/ 07 июня 2018

У меня часто есть Модели и Dtos, такие как:

// DTO class
public class OrderDto 
{
    public int Id { get; set; }

    public DateTime Date { get set; }

    public int ProductId { get; set; }

    // ...
}

// Model class
public class Order : BaseObject 
{
    public DateTime Date { get set; }

    public Product Product { get; set; }

    // ...
}

// Model class
public class Product : BaseObject
{
    // ...
}

Чтобы сопоставить мой OrderDto с классом Order, мне нужно настроить AutoMapper для этой конкретной «ассоциации», например:

CreateMap<OrderDto, Order>()
.ForMember(m => m.Product, d => d.ResolveUsing((d, m) =>
{
    return m.Session.GetObjectByKey<Product>(dto.ProductId);
}))

Это довольно громоздко, чтобы сделать это для каждого случая, подобного этому.Поэтому я пытался обобщить это поведение с помощью пользовательского класса TypeConverter:

public class IntBaseObjectTypeConverter : ITypeConverter<int, BaseObject>
{
    private UnitOfWork uow;

    // ...

    public BaseObjectConvert(int source, BaseObject destination, ResolutionContext context)
    {
        return uow.Session.GetObjectByKey(typeof(destination), source);
    }
}

Однако, конечно, это не удастся, если назначение будет нулевым.К сожалению, ResolutionContext не дает мне никакой информации о конкретном типе свойства назначения.

Теперь мой вопрос: есть ли другой способ добиться с помощью AutoMapper того, что я хотел бы сделать?

Обратите внимание, что я не использую Entity Framework, который, конечно, решит эту проблему на уровне модели с использованием внешнего ключа и навигационных свойств.Я использую XPO от DevExpress, который не позволяет внешний ключ и навигационные свойства, как в Entity Framework.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...