哪种方法是最好的? AutoMapper 反对隐式(C# 参考)

2023-11-21

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; }
}

通常我们这样做:

Employee employee = new Employee
{
    Name = "John SMith",
    Email = "[email protected]"
}

EmployeeViewItem viewItem = new EmployeeViewItem();
viewItem.Name = employee.Name;
viewItem.Email = employee.Email;

与自动映射器

 EmployeeViewItem employeeVIewItem = Mapper.Map<Employee, EmployeeViewItem>(employee); 

现在,使用隐式 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;
    }
}

AutoMapper 使用反射来映射属性(轻微的性能开销),允许高级自定义映射规则,并且在基本(常见?)场景中需要 1 行代码。

隐式运算符要求您指定每个属性,容易出错(添加新属性但不将其添加到运算符),更难以设置多种类型,创建大量无用的代码,甚至在最基本的设置中您仍然有 N 行代码,其中 N 是属性的数量。

我认为这是不言而喻的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

哪种方法是最好的? AutoMapper 反对隐式(C# 参考) 的相关文章

随机推荐

  • 使用 CsvHelper 可以将空格转换为可为空吗?

    我有一些非常蹩脚的 Csv 文件需要解析 我正在使用 CsvHelper 它运行得很棒 除了我有一些带有空格的行 通常我有一个双行 File 文本 SomeDouble 更多文本 好 1 23 好 不好 不好 如果我尝试将其映射到 publ
  • 用于去抖动(包括函数参数)的 Python 装饰器

    如何在 python 中编写一个去抖装饰器 它不仅对调用的函数进行去抖 而且对所使用的函数参数 函数参数组合进行去抖 去抖意味着在给定的时间范围内抑制对函数的调用 假设您在 1 秒内调用一个函数 100 次 但您只想允许该函数每 10 秒运
  • MySQLi 相对于 MySQL 的优势 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 与 MySQL 相比 使用
  • C 中的指针和数组有什么不同吗?

    我正在编写一个小型 C 程序来进行一些数字运算 它需要在函数之间传递数组 这些函数应该接受并返回指针 对吧 例如 这个 我知道这可能不是最有效的事情 int reverse int l int len int reversed malloc
  • Bootstrap 3.0:响应列重置文档部分

    嘿 如果您在 Bootstrap 3 0 文档中查看 响应列重置 副标题 它会显示以下内容 有了四层网格 您必然会遇到问题 在某些断点处 您的列不能完全清除 因为一层比另一层高 要解决此问题 请结合使用 clearfix 和我们的响应式实用
  • ASP.NET MVC 路由和静态数据(即图像、脚本等)

    如果我在 ASP NET MVC1 或 2 Web 应用程序中请求静态资源 例如 图像 javascript 文件或 css 文件 NET 框架是否会尝试查看如果请求与路由列表匹配 并且最终找不到它的控制器 eg 资源 Content Im
  • 如何在 PHP 中将日期时间转换为 ISO 8601

    我如何转换我的时间2010 12 30 23 21 46ISO 8601 日期格式 面向对象 这是推荐的方式 datetime new DateTime 2010 12 30 23 21 46 echo datetime gt format
  • 使用 go-template 内的范围检测数组中的最后一项

    这个程序简单地输出 1 4 2 但我想打印 1 4 2 正如您所看到的 逗号打印在数组的每个项目之后 package main import os import text template func main params map stri
  • 在Android中编辑文本时获取光标位置?

    我正在使用自定义 EditText 视图 我已经重写了 OnKeyUp 事件并且能够捕获 Enter 键按下 现在我的要求是 当用户输入文本 嗨 你好吗 然后将光标保留在 are 一词后面并按 Enter 键 我需要获取光标位置 以便在按下
  • 在多线程环境中使用 HttpClient 的最佳实践

    一段时间以来 我一直在多线程环境中使用 HttpClient 对于每个线程 当它发起连接时 都会创建一个全新的 HttpClient 实例 最近我发现 使用这种方法会导致用户打开的端口过多 并且大部分连接处于TIME WAIT状态 http
  • 如何使用 Eclipse 逐行调试 Android 应用程序?

    我熟悉 VS Net IDE 它对调试有很多支持 但android开发对我来说是新鲜事 我正在使用 Eclipse IDE 我想知道如何像在 Net IDE 中一样逐行调试 Android 应用程序 目前我正在使用日志窗口 但我对此并不满意
  • 运行 cordova 平台添加 android 时生成错误

    我正在尝试根据以下链接创建一个 Android PhoneGap 项目 http docs phonegap com en edge guide platforms android index md html 但是 当我运行命令时 cord
  • 是否可以在 ASP.NET ListView 控件中进行自定义分组?

    你只能在ListView中定义一个GroupItemCount 但是如果你想根据数据源中项目的属性进行分组怎么办 有点像临时分组依据 数据源按此属性排序 我见过一些示例 其中 ItemTemplate 中的某些标记是有条件显示的 但如果可能
  • Rails 路由可在单个应用程序上处理多个域

    尽管这里和其他地方有几个类似的问题 但我一直无法找到解决此问题的可行解决方案 这个问题似乎在 Rails 3 中还没有得到解答 所以这里是 我有一个应用程序 当前允许用户创建自己的包含应用程序实例的子域 在 Rails 2 中 您最好使用
  • Rails 3:调用控制器内的函数

    如果我想在控制器内部调用函数 我应该把它们放在哪里 如果您希望它位于控制器本地 那么您所需要做的就是将其添加到您想要使用的控制器中 private def myfunction function code end 对于所有控制器 您可以将其
  • 用户态自动装箱?

    是否可以为您自己的类实现自动装箱 为了说明我的示例 我可能想写以下内容 Foo foo lolcat 这就是 Java 在幕后要做的事情 根据我自己的定义 在某个地方 以某种方式 Foo foo new Foo foo setLolcat
  • 如何动态渲染新的 Twitter 小部件?

    如果我在 Twitter 上注册一个小部件 我会得到以下代码 a class twitter timeline href https twitter com vinto60utd Tweets by vinto60utd a
  • Sequelize — 对 DATE 字段使用 UNIX 时间戳

    有没有办法强制 Sequelize 使用 UNIX 时间戳作为默认时间格式both对于createdAt updatedAt时间戳and对于自定义的 Sequelize DATE 字段类型 Thanks 附 我正在使用 MySQL Whil
  • Java:优先级队列

    我有一个java程序 它是这样的 公共类 PriorityQueue 示例 public static void main String args PriorityQueue
  • 哪种方法是最好的? AutoMapper 反对隐式(C# 参考)

    Automapper 是一种匹配类型的方法 理想情况下当您想要映射模型及其视图模型时 但这与我们在 C 中使用隐式实现的方法不一样吗 假设两个模型具有相同的属性但名称不同 在这种情况下 您需要在 AutoMapper 中指定模型之间链接的模