代码之家  ›  专栏  ›  技术社区  ›  David Létourneau

Automapper 8 Ignore属性对子代不起作用

  •  0
  • David Létourneau  · 技术社区  · 6 年前

    所以问题是为什么eTaxCollections的值在调用之后会丢失_映射器。映射(vmodel,model)我如何保存它们?

    忽略属性不起作用。我还尝试使用destinationvalue()。我花了两天的时间想弄清楚,我累坏了。

        public void WeatherForecasts()
                {
                    int[] excludeTaxes = new int[] { 2 };
                    var vmodel = new ExpenseReportCreateEditModel();
                    vmodel.Expenses.Add(new ExpenseReportItemModel()
                    {
                        ExcludeTaxIds = excludeTaxes,
                        Total = 12,
                        Id = 1
                    });
    
                    // fetch from bd
                    var model = new ExpenseReport();
                    // values will be lost after _mapper.Map...
                    var eTaxCollections = new HashSet<ExcludeExpenseReportItemTax>();
                    eTaxCollections.Add(new ExcludeExpenseReportItemTax()
                    {
                        TaxId = 1,
                        ExpenseReportItemId = 1
                    });
    
                    model.Items.Add(new ExpenseReportItem()
                    {
                        ExcludeTaxes = eTaxCollections,
                        ExpenseReportId = 1,
                        Id = 9
                    });
    
                    _mapper.Map(vmodel, model);
                }
    
    public class ExpenseReportCreateEditModelProfile : Profile
            {
                public ExpenseReportCreateEditModelProfile()
                {
                    CreateMap<ExpenseReportCreateEditModel, ExpenseReport>()
                        .ForMember(d => d.Items, s => s.MapFrom(m => m.Expenses));
                }
            }
    
            public class ExpenseReportItemModelProfile : Profile
            {
                public ExpenseReportItemModelProfile()
                {
                    CreateMap<ExpenseReportItemModel, ExpenseReportItem>()
                        .ForMember(d => d.ExcludeTaxes, s => s.Ignore()); // <<<==== data are lost
                }
            }
            public class ExpenseReportCreateEditModel
            {
                public int Id { get; set; }
                public ICollection<ExpenseReportItemModel> Expenses { get; set; }
                public ExpenseReportCreateEditModel()
                {
                    Expenses = new HashSet<ExpenseReportItemModel>();
                }
            }
    
            public class ExpenseReportItemModel
            {
                public int Id { get; set; }
                public ICollection<int> ExcludeTaxIds { get; set; }
                public decimal Total { get; set; }
    
                public ExpenseReportItemModel()
                {
                    ExcludeTaxIds = new HashSet<int>();
                }
            }
    
            public class ExpenseReport
            {
                public int Id { get; set; }
                public virtual ICollection<ExpenseReportItem> Items { get; set; }
                public ExpenseReport()
                {
                    Items = new HashSet<ExpenseReportItem>();
                }
            }
    
            public class ExpenseReportItem 
            {
                public int Id { get; set; }
                public int ExpenseReportId { get; set; }
                public virtual ICollection<ExcludeExpenseReportItemTax> ExcludeTaxes { get; set; }
                public ExpenseReportItem()
                {
                    ExcludeTaxes = new HashSet<ExcludeExpenseReportItemTax>();
                }
            }
    
            public class ExcludeExpenseReportItemTax
            {
                public int ExpenseReportItemId { get; set; }
                public virtual ExpenseReportItem ExpenseReportItem { get; set; }
                public int TaxId { get; set; }
            }
    


    我执行执行计划,也许这就是问题所在:

    $typeMapDestination = ($dest ?? .New WebApplication1.Controllers.SampleDataController+ExpenseReportItem());
    

    我现在必须找到解决办法

    以下是完整的执行计划:

    .If ($src == null) {
        .Default(WebApplication1.Controllers.SampleDataController+ExpenseReportItem)
    } .Else {
        .Block() {
            $typeMapDestination = ($dest ?? .New WebApplication1.Controllers.SampleDataController+ExpenseReportItem());
            .Try {
                .Block(System.Int32 $resolvedValue) {
                    .Block() {
                        $resolvedValue = .If (
                            $src == null || False
                        ) {
                            .Default(System.Int32)
                        } .Else {
                            $src.Id
                        };
                        $typeMapDestination.Id = $resolvedValue
                    }
                }
            } .Catch (System.Exception $ex) {
                .Block() {
                    .Throw .New AutoMapper.AutoMapperMappingException(
                        "Error mapping types.",
                        $ex,
                        .Constant<AutoMapper.TypePair>(AutoMapper.TypePair),
                        .Constant<AutoMapper.TypeMap>(AutoMapper.TypeMap),
                        .Constant<AutoMapper.PropertyMap>(AutoMapper.PropertyMap));
                    .Default(System.Int32)
                }
            };
            $typeMapDestination
        }
    }
    
    0 回复  |  直到 6 年前