c# - 具有通用类型继承的 AutoMapper

标签 c# automapper

我正在尝试使用 AutoMapper 将 CustomerDTO 映射到我的域实体 ICustomer。对于第一个继承级别,一切正常,但对于其他继承级别则不然。

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

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 ...

最佳答案

知道了!

问题是由于 IBaseEntity 的“Id”属性缺少 setter。

修改后一切正常

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

关于c# - 具有通用类型继承的 AutoMapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1823947/

相关文章:

c# - 在 ASP.NET Core 7 WebApi 中使用 RouteGroupBuilder 时如何获取路由组前缀

C# 列表框项目大小限制

c# - 将 odata $expand asp.net core 与 AutoMapper 一起使用时不返回扩展集合

c# - 如何使用自动映射器实例 API 验证配置

c# - API 在 reviews 属性中返回 null

c# - 如何使用 automapper 映射具有多个表的数据集

c# - 排除 ef 核心迁移文件的代码覆盖率

c# - 获取异步结果死锁(尽管将 configure await 设置为 false)

c# - 如果时区规则更改,以前保存的日期时间的 UTC 到本地时间转换

c# - 使用 DataContractSerializer 序列化接口(interface)列表