Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.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# Automapper,用于从外部API返回的Id映射对象_C#_Asp.net_Asp.net Mvc_Automapper - Fatal编程技术网

C# Automapper,用于从外部API返回的Id映射对象

C# Automapper,用于从外部API返回的Id映射对象,c#,asp.net,asp.net-mvc,automapper,C#,Asp.net,Asp.net Mvc,Automapper,我有两个类,一个db实体和一个dto public class Employee { public string Name { get; set; } public int DepartmentId { get; set; } } public class EmployeeDto { public string Name { get; set; } public DepartmentDto DepartmentDto { get; set; } } 在这种情况

我有两个类,一个db实体和一个dto

public class Employee
{
    public string Name { get; set; }
    public int DepartmentId { get; set; }
}

public class EmployeeDto
{
    public string Name { get; set; }
    public DepartmentDto DepartmentDto { get; set; }
}
在这种情况下,部门不存储在本地数据库中,而是从外部api服务调用

// DepartmentApiWrapper.cs
public class DepartmentApiWrapper : IDepartmentApiWrapper
{
    public async Task<Department> GetDepartment(string id)
        // logic here to call from external api and return department

        return department;
    }
}
//DepartmentApiWrapper.cs
公共类DepartmentApiWrapper:IDepartmentApiWrapper
{
公共异步任务GetDepartment(字符串id)
//从外部api和退货部门调用的逻辑
退货部;
}
}
所以我想做的是,从一个雇员映射一个EmployeeDto

cfg.CreateMap<Employee, EmployeeDto>()
cfg.CreateMap()
当这个映射出现时,让它使用员工中的Id调用DepartmentApiWrapper,获取部门,然后将该部门映射到DepartmentDto并将其分配给EmployeeDto

部门信息来自共享存储库,不能购买到本地数据库中,必须从外部api调用

我在automapper方面没有经验,也不知道从哪里开始,我甚至不知道这是不是可以做到的。我知道我们正在使用静态映射器——一些线索建议使用实例映射器,尽管我不知道如何实现这一点


任何帮助都将不胜感激,谢谢你

你几乎可以在a中做任何你想做的事情,尽管通过从外部DB/API丰富图形来调试动态填充
部门数据到
图形的“魔力”可能相当困难。根据建议,假设部门是静态的,数量很少,为什么不在引导MVC应用程序时将它们全部预加载到缓存中,由
部门ID
键入-这样,您就可以进行内存中的查找。注意不要让共享部门发生变异!Automapper基本上用于将一个对象映射到另一个对象。一旦您引入调用API来检索映射中定义的数据,那么您可能做错了什么-您违反了单一责任原则。@StuartLC这是一个非常有创意的解决方案-谢谢,我想我可能会这么做。返回的数据将是员工列表,显示他们所在的部门。这可能会产生许多db调用,这将是一场噩梦。--ODawg-你是对的,因为我刚刚开始使用automapper,似乎这违反了这些原则。也许最好避免这种情况。谢谢。您可以在a中做任何您喜欢的事情,尽管通过从外部DB/API丰富图形来调试动态填充
DepartmentDto
图形的“魔力”可能相当困难。根据建议,假设部门是静态的,数量很少,为什么不在引导MVC应用程序时将它们全部预加载到缓存中,由
部门ID
键入-这样,您就可以进行内存中的查找。注意不要让共享部门发生变异!Automapper基本上用于将一个对象映射到另一个对象。一旦您引入调用API来检索映射中定义的数据,那么您可能做错了什么-您违反了单一责任原则。@StuartLC这是一个非常有创意的解决方案-谢谢,我想我可能会这么做。返回的数据将是员工列表,显示他们所在的部门。这可能会产生许多db调用,这将是一场噩梦。--ODawg-你是对的,因为我刚刚开始使用automapper,似乎这违反了这些原则。也许最好避免这种情况。多谢各位。