【问题标题】:AutoMapper With Generic Type Inheritance具有泛型类型继承的 AutoMapper
【发布时间】:2009-12-01 04:11:42
【问题描述】:

我正在尝试使用 AutoMapper 将 CustomerDTO 与我的域实体 ICustomer 进行映射。一切都适用于第一个继承级别,但不适用于其他继承级别。

我正在为我的域模型使用接口,因为具体类型是由我的 LinqToSql 数据库基础设施层的 StructureMap 注入的。

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”属性上有一个Dictionnary missing Key Exception ...

【问题讨论】:

    标签: c# automapper


    【解决方案1】:

    知道了!

    问题是由于缺少 IBaseEntity 的“Id”属性的设置器。

    修改后一切正常

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

    【讨论】:

    • 另一件事 - 无需执行“DynamicMap” - 仅用于在编译时不知道类型的情况。只需使用 Mapper.Map 代替。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 2015-09-15
    • 2015-04-26
    • 2020-05-17
    • 1970-01-01
    • 2018-08-01
    相关资源
    最近更新 更多