AutoMapper с наследованием общего типа - PullRequest
4 голосов
/ 01 декабря 2009

Я пытаюсь сопоставить CustomerDTO с моей сущностью домена ICustomer с AutoMapper. Все отлично работает для первого уровня наследования, но не для остальных.

Я использую интерфейсы для моей доменной модели, поскольку конкретные типы внедряются StructureMap из моего слоя инфраструктуры базы данных LinqToSql.

public interface IBaseEntity<TPk>
{
    TPk Id { get; }
}

public interface ICustomer : IBaseEntity<int>
{
    string Email { get; set; }
}

[DataContract]
public class CustomerDTO
{
    [DataMember]
    public int Id { get; set; }

    [DataMember]
    public string Email { get; set; }
}

Теперь отображение AutoMapper

Mapper.CreateMap<CustomerDTO, ICustomer>();

Mapper.CreateMap<ICustomer, CustomerDTO>();

Mapper.AssertConfigurationIsValid();

Теперь, где я использую отображение

    public CreateCustomerServiceResult CreateCustomer(CustomerDTO customer)
    {
        var result = new CreateCustomerServiceResult();
        try
        {
            var originalMapped = Mapper.DynamicMap<CustomerDTO, ICustomer>(customer);

            var newCustomer = _customerService.CreateCustomer(originalMapped);

            var newMapped = Mapper.DynamicMap<ICustomer, CustomerDTO>(newCustomer);

            result.Customer = newMapped;
        }
        catch (Exception ex)
        {

        }
        return result;
    }

У меня Исключение из словаря отсутствует в свойстве "Id" ...

1 Ответ

1 голос
/ 01 декабря 2009

Понял!

Проблема связана с отсутствующим установщиком свойства "Id" IBaseEntity.

После замены все работает

public interface IBaseEntity<TPk>
{
    TPk Id { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...