【问题标题】:automapper: Mapping complex source class tocomplex derived classesautomapper:将复杂的源类映射到复杂的派生类
【发布时间】:2016-11-25 23:07:29
【问题描述】:
    [DataContract]
    public class SupplierView : BaseView
    {   
        [DataMember]
        Public int SupplierId { get; set; }
        [DataMember]
        Public ApprovedSupplierView approvedSupplier { get; set; }
        [DataMember]
        Public AdHocSupplierView adhocsupplier { get; set; }
        //other fields...
    }
    [DataContract]
    public class ContextSupplierView : SupplierView //Working
    {   
        [DataMember]
        Public int SupplierId { get; set; }
        //New fields added
        [DataMember]
        Public ContextApprovedSupplierView contextApprovedSupplier { get; set; }
        [DataMember]
        Public ContextAdHocSupplierView contextAdhocsupplier { get; set; }
        //other fields...
    }
    public class ApprovedSupplierView :  BaseView
    {   
        [DataMember]
        Public string Name { get; set; }
        [DataMember]
        Public string Phone { get; set; }




    [DataContract]
    public class ContextSupplierView : SupplierView //Not working
    {   
        [DataMember]
        Public int SupplierId { get; set; }
        [DataMember]
        Public new ContextApprovedSupplierView approvedSupplier { get; set; }
        [DataMember]
        Public new ContextAdHocSupplierView adhocsupplier { get; set; }
        //other fields...
    }

    [DataContract]
    public class ContextApprovedSupplierView :  ApprovedSupplierView
    {   
        [DataMember]
        Public string ContextDescription { get; set; }

    SupplierView supplierObject = new SupplierView(Linq populates this correctly);
    Mapper.CreateMap<SupplierView, ContextSupplierView>();
    claimContext.Supplier = Mapper.Map<ContextSupplierView>(supplierObject);

我有一个项目,它已经从数据库中获取了供应商及其嵌套类型,但是我如何使用 automapper 将所有内容复制到具有 ContextApprovedSupplier 和 ContextAdHocSupplier adHocSupplier 的 ContextSupplier 中,但这给出了:

缺少类型映射配置或不支持的映射。

映射类型:ApprovedSupplierView -> ContextApprovedSupplierView TotalSystemsPlc.Bluescape.Claims.DataContracts.Views.ProjectLoadViews.ApprovedSupplierView -> TotalSystemsPlc.Bluescape.Claims.DataContracts.Views.ContextViews.ContextApprovedSupplierView

目标路径: ContextSupplierView.ApprovedSupplier.ApprovedSupplier

来源价值: TotalSystemsPlc.Bluescape.Claims.DataContracts.Views.ProjectLoadViews.ApprovedSupplierView

如果我创建新字段 contextApprovedSupplier 和 contextAdhocsupplier,它会自动填充 ApprovedSupplier 和 Adhocsupplier,它们可以单独映射,但我宁愿在一个命令中完成所有操作。 由于我已经尝试了几个小时来做​​这件事,任何帮助都会得到很大的帮助!!!

编辑:抱歉,请立即找到正确的层次结构!

【问题讨论】:

  • SupplierViewContextSupplierView 是什么?
  • 不应该从ContextSupplier 派生Supplier 吗?如果不是,则提供声明隐藏属性的BaseapprovedSupplier adhocsupplier
  • 您可以尝试添加映射:Mapper.CreateMap&lt;ApprovedSupplierView, ContextApprovedSupplier&gt;() 但在这种情况下您的视图不应该返回ContextApprovedSupplierView吗?
  • @Rafal - 是的,我希望原始类映射到派生类
  • @AndrewDay 能回答你的问题吗?

标签: c# model-view-controller automapper


【解决方案1】:

@Rafal 将映射添加在一起确实有效,非常感谢!

Mapper.CreateMap<SupplierView, ContextSupplierView>();
Mapper.CreateMap<ApprovedSupplierView, ContextApprovedSupplierView>();
Mapper.CreateMap<AdHocSupplierView, ContextAdHocSupplierView>();

我还必须添加一个默认构造函数,因为它会发出一个错误,它指的是缺少演员表!我期待现在更多地使用 Automapper。

【讨论】:

    猜你喜欢
    • 2016-08-04
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 2020-04-03
    • 1970-01-01
    相关资源
    最近更新 更多