Automapper 是一种匹配类型的方法,理想情况下,当您想要映射模型及其视图模型时。但这不是我们可以在 C# 中隐式使用的相同方法吗?(假设两个模型属性相同但名称不同,此时需要在模型间链接的AutoMapper中指定)
使用 autommaper 我们有
public class Employee
{
public string Name { get; set; }
public string Email { get; set; }
}
public class EmployeeViewItem
{
public string Name { get; set; }
public string Email { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
通常我们这样做:
Employee employee = new Employee
{
Name = "John SMith",
Email = "john@codearsenal.net"
}
EmployeeViewItem viewItem = new EmployeeViewItem();
viewItem.Name = employee.Name;
viewItem.Email = employee.Email;
Run Code Online (Sandbox Code Playgroud)
使用 AutoMapper
EmployeeViewItem employeeVIewItem = Mapper.Map<Employee, EmployeeViewItem>(employee);
Run Code Online (Sandbox Code Playgroud)
现在,使用隐式 C# 参考
public class Employee
{
public static implicit operator EmployeeViewItem(Employee employee)
{
EmployeeViewItem viewItem = new EmployeeViewItem();
viewItem.Name = employee.Name;
viewItem.Email = employee.Email;
return viewItem;
}
public static implicit operator Employee(EmployeeViewItem ev)
{
var e = new Employee();
e.Name = ev.Name;
e.Email = ev.Email;
return e;
}
}
Run Code Online (Sandbox Code Playgroud)
AutoMapper 使用反射来映射属性(轻微的性能开销),允许用于映射的高级自定义规则,并且在基本(常见?)场景中需要 1 行代码。
隐式运算符要求您指定每个属性,容易出错(添加新属性但不将其添加到运算符中),更难以为多种类型设置,创建大量无用代码,即使在最基本的设置中,您仍然有 N 行代码,其中 N 是属性的数量。
我认为它不言自明。
| 归档时间: |
|
| 查看次数: |
3515 次 |
| 最近记录: |