Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自动映射和嵌套对象_C#_Automapper - Fatal编程技术网

C# 自动映射和嵌套对象

C# 自动映射和嵌套对象,c#,automapper,C#,Automapper,假设我有以下课程 public class Parent { public int ParentId { get; set; } public List<Child> Children{get; set; } // other properties } public class Child { public int ChildId { get; set; } // other properties } public class Paren

假设我有以下课程

public class Parent {
    public int ParentId { get; set; }
    public List<Child> Children{get; set; }
    // other properties
}

public class Child {
    public int ChildId { get; set; }
    // other properties
}


public class ParentVm {
    public int ParentId { get; set; }
    public List<ChildVm> Children{get; set; }
    // other properties
}

public class ChildVm {
    public int ParentId { get; set; }
    public int ChildId { get; set; }
    // other properties
}

Parent parent = /*something*/
var parentVm = Mapper.Map<ParentVm>(parent);
公共类父类{
public int ParentId{get;set;}
公共列表子项{get;set;}
//其他属性
}
公营儿童{
public int ChildId{get;set;}
//其他属性
}
公共类ParentVm{
public int ParentId{get;set;}
公共列表子项{get;set;}
//其他属性
}
公共类ChildVm{
public int ParentId{get;set;}
public int ChildId{get;set;}
//其他属性
}
Parent=/*某物*/
var parentVm=Mapper.Map(父级);

ChildVm
中,有属性
ParentId
。我如何将该值传播到使用automapper中?

我对您的问题做了一些假设

  • 您正在尝试将
    Parent
    映射到
    ParentVm
    (以及
    Child
    映射到
    ChildVm
  • 您正在尝试将
    Parent
    ParentId
    映射到
    ChildVm
    ParentId
  • 如果这两个都是真的,那么下面的代码片段(来自)应该可以帮助您。注意在第一个
    CreateMap
    中使用了
    AfterMap

    void Main()
    {
        var config = new MapperConfiguration(cfg =>
        {
            cfg.CreateMap<Parent, ParentVm>().AfterMap((s, d) =>
            {
                foreach (var child in d.Children)
                {
                    child.ParentId = d.ParentId;
                }
            });
            cfg.CreateMap<Child, ChildVm>();
        });
    
        var mapper = config.CreateMapper();
    
        var parent = new Parent { ParentId = 1, Children = new List<Child>() };
        var child1 = new Child { ChildId = 1 };
        var child2 = new Child { ChildId = 2 };
        parent.Children.Add(child1);
        parent.Children.Add(child2);
    
        var parentVm = mapper.Map<Parent, ParentVm>(parent);
        parentVm.Dump();
    }
    
    public class Parent
    {
        public int ParentId { get; set; }
        public List<Child> Children { get; set; }
        // other properties
    }
    
    public class Child
    {
        public int ChildId { get; set; }
        // other properties
    }
    
    
    public class ParentVm
    {
        public int ParentId { get; set; }
        public List<ChildVm> Children { get; set; }
        // other properties
    }
    
    public class ChildVm
    {
        public int ParentId { get; set; }
        public int ChildId { get; set; }
        // other properties
    }
    
    void Main()
    {
    var config=new-MapperConfiguration(cfg=>
    {
    cfg.CreateMap().AfterMap((s,d)=>
    {
    foreach(d.Children中的var child)
    {
    child.ParentId=d.ParentId;
    }
    });
    CreateMap();
    });
    var mapper=config.CreateMapper();
    var parent=new parent{ParentId=1,Children=new List()};
    var child1=新子{ChildId=1};
    var child2=新子{ChildId=2};
    parent.Children.Add(child1);
    parent.Children.Add(child2);
    var parentVm=mapper.Map(父级);
    parentVm.Dump();
    }
    公共类父类
    {
    public int ParentId{get;set;}
    公共列表子项{get;set;}
    //其他属性
    }
    公营儿童
    {
    public int ChildId{get;set;}
    //其他属性
    }
    公共类ParentVm
    {
    public int ParentId{get;set;}
    公共列表子项{get;set;}
    //其他属性
    }
    公共类ChildVm
    {
    public int ParentId{get;set;}
    public int ChildId{get;set;}
    //其他属性
    }
    
    输出:


    我对你的问题做了一些假设

  • 您正在尝试将
    Parent
    映射到
    ParentVm
    (以及
    Child
    映射到
    ChildVm
  • 您正在尝试将
    Parent
    ParentId
    映射到
    ChildVm
    ParentId
  • 如果这两个都是真的,那么下面的代码片段(来自)应该可以帮助您。注意在第一个
    CreateMap
    中使用了
    AfterMap

    void Main()
    {
        var config = new MapperConfiguration(cfg =>
        {
            cfg.CreateMap<Parent, ParentVm>().AfterMap((s, d) =>
            {
                foreach (var child in d.Children)
                {
                    child.ParentId = d.ParentId;
                }
            });
            cfg.CreateMap<Child, ChildVm>();
        });
    
        var mapper = config.CreateMapper();
    
        var parent = new Parent { ParentId = 1, Children = new List<Child>() };
        var child1 = new Child { ChildId = 1 };
        var child2 = new Child { ChildId = 2 };
        parent.Children.Add(child1);
        parent.Children.Add(child2);
    
        var parentVm = mapper.Map<Parent, ParentVm>(parent);
        parentVm.Dump();
    }
    
    public class Parent
    {
        public int ParentId { get; set; }
        public List<Child> Children { get; set; }
        // other properties
    }
    
    public class Child
    {
        public int ChildId { get; set; }
        // other properties
    }
    
    
    public class ParentVm
    {
        public int ParentId { get; set; }
        public List<ChildVm> Children { get; set; }
        // other properties
    }
    
    public class ChildVm
    {
        public int ParentId { get; set; }
        public int ChildId { get; set; }
        // other properties
    }
    
    void Main()
    {
    var config=new-MapperConfiguration(cfg=>
    {
    cfg.CreateMap().AfterMap((s,d)=>
    {
    foreach(d.Children中的var child)
    {
    child.ParentId=d.ParentId;
    }
    });
    CreateMap();
    });
    var mapper=config.CreateMapper();
    var parent=new parent{ParentId=1,Children=new List()};
    var child1=新子{ChildId=1};
    var child2=新子{ChildId=2};
    parent.Children.Add(child1);
    parent.Children.Add(child2);
    var parentVm=mapper.Map(父级);
    parentVm.Dump();
    }
    公共类父类
    {
    public int ParentId{get;set;}
    公共列表子项{get;set;}
    //其他属性
    }
    公营儿童
    {
    public int ChildId{get;set;}
    //其他属性
    }
    公共类ParentVm
    {
    public int ParentId{get;set;}
    公共列表子项{get;set;}
    //其他属性
    }
    公共类ChildVm
    {
    public int ParentId{get;set;}
    public int ChildId{get;set;}
    //其他属性
    }
    
    输出:


    您的问题并没有显示您试图将
    ChildVm
    ParentId
    映射到任何内容。另外,如果您试图创建
    ParentVm
    ,则您的
    Mapper.Map
    命令似乎是向后的,因为该行将创建一个
    Parent
    对象。实际用例是否正在尝试将具有
    子对象的
    父对象映射到具有
    子对象的
    父对象映射到具有
    子对象的
    父对象映射到具有
    子对象的
    父对象映射?要将
    Parent
    ParentId
    属性传播到
    ChildVm
    ParentId
    属性,您的问题表明您没有试图将
    ChildVm
    ParentId
    映射到任何对象。另外,如果您试图创建
    ParentVm
    ,则您的
    Mapper.Map
    命令似乎是向后的,因为该行将创建一个
    Parent
    对象。实际用例是否正在尝试将具有
    子对象的
    父对象映射到具有
    子对象的
    父对象映射到具有
    子对象的
    父对象映射到具有
    子对象的
    父对象映射?并且要将
    父项
    父项ID
    属性传播到
    子项VM
    父项ID
    属性?