Automapper:手动映射属性

2024-03-11

我刚刚开始使用 automapper 来映射 DTO实体,它似乎工作得很好。

在某些特殊情况下,我只想映射某些属性并执行额外的检查。如果没有自动映射器,代码如下所示(使用fasterflect的PropertyExtensions):

object target;
object source;
string[] changedPropertyNames = { };

foreach (var changedPropertyName in changedPropertyNames)
{
    var newValue = source.GetPropertyValue(changedPropertyName);
    target.SetPropertyValue(changedPropertyName, newValue);
}

当然,如果需要类型转换,则此代码将不起作用。 Automapper 使用内置的 TypeConverters,我还创建了一些特定的 TypeConverter 实现。

现在我想知道是否可以映射各个属性并使用自动映射器的类型转换实现,如下所示

Mapper.Map(source, target, changedPropertyName);

Update

我认为更多信息是必要的:

我已经创建了一些地图,例如

Mapper.CreateMap<CalendarEvent, CalendarEventForm>()

我还为 CalendarEvent 中可为空的 dateTime 属性创建了一个带有自定义类型转换器的映射,例如

Mapper.CreateMap<DateTimeOffset?, DateTime?>().ConvertUsing<NullableDateTimeOffsetConverter>();

我在 Web API OData 控制器中使用这些地图。发布新的 EntityDTO 时,我使用

Mapper.Map(entityDto, entity);

并将实体保存到数据存储中。

但如果使用PATCH, a Delta<TDto> entityDto传递给我的控制器方法。因此我需要打电话entityDto.GetChangedPropertyNames()并用更改后的值更新我现有的持久实体。

基本上,这适用于我的简单解决方案,但如果更改的属性之一是例如ADateTimeOffset?我想用我的NullableDateTimeOffsetConverter.


如果您只想映射某些选定的属性,则必须执行以下操作

// Create a map
var map = CreateMap<Source,Target>();
// ingnore all existing binding of property
map.ForAllMembers(opt => opt.Ignore());
// than map property as following
map.ForMember(dest => dest.prop1, opt => opt.MapFrom( src => src.prop1));
map.ForMember(dest => dest.prop2, opt => opt.MapFrom( src => src.prop2));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Automapper:手动映射属性 的相关文章

随机推荐

  • 如何将 vuetify 添加到默认 vuepress 主题

    是否可以将 vuetify 添加到默认 vuepress 主题 我只需要向默认主题添加一些组件 但是使用 vuetify 来处理组件中的表单会很好 我找到了一个使用 vuetify 的自定义 vuepress 主题 但我更喜欢使用默认的 v
  • 如何检测 git 中的恶意合并?

    我创建了一个简单的 git 存储库来说明我的问题 可在 GitHub 上找到 https github com smileyborg EvilMerge https github com smileyborg EvilMerge 这是回购历
  • 在 C++11 的析构函数中锁定互斥体

    我有一些代码需要线程安全和异常安全 下面的代码是我的问题的一个非常简化的版本 include
  • 从 ListView 获取 GridViewColumn 标题值?

    我有这个 XAML 代码
  • 此 Mac 上安装的 CoreSimulator 框架版本已过时,且此版本的 Xcode 不支持

    在 macOS Big Sur 12 3 0 Xcode 12 5 0 上通过 cli fastlane 运行 ui 测试时 xcodebuild showBuildSettings workspace MyWorkspace xcwork
  • 如何从json对象中获取json数组?

    大家好 我需要你的帮助来阅读随机命名来自 json 对象的数组 在此任务中 客户端根据自己的要求制作 json 对象 like tags demo 1 demo 2 demo 3 demo 4 demo 5 N 我在用着 N 用于定义一个数
  • Symfony 5 更新后 Laravel 7 电子邮件异常中断

    我已经升级到 Laravel 7 1 现在 Symfony 5 这些类不再存在 use Symfony Component Debug Exception FlattenException use Symfony Component Deb
  • 具有两列的 Flex 容器;第二列有四行

    我在 Flex 中显示以下布局时遇到困难 我有 5 个盒子 我想将容器一分为二 其中一个盒子垂直显示 另外 4 个垂直显示 这是我的 CSS trades trade panel flex 1 layout 4 5 flex directi
  • matlab中writetable用空格替换NaN

    给定一个包含许多NaN 如何将此表编写为 excel 或 csv 文件 其中 NaN 被空格替换 我使用以下函数 T table NaN 5 2 VariableNames A C writetable T filename 我不想用零替换
  • 如何正确使用 Angular 5 中的 FileSaver?

    我正在尝试使用文件上传功能将文件保存到文件系统 由于该文件是 Angular 应用程序所必需的 而不是后端 rest api java 所必需的 所以我决定将其保存在前端应用程序中 这意味着内部的某处 角度应用程序中的资产文件夹 我已经安装
  • useRef() 与仅声明变量相比有哪些优点?

    查看 hooks 文档和一些博客 我们了解到 当使用 useRef 时 我们存储了一个可变值 Docs https reactjs org docs hooks reference html useref 您可能熟悉 ref 主要作为访问
  • 将数据从 Activity 发送到 Service

    如何从当前发送数据Activity到背景Service在特定时间运行的课程 我尝试进入Intent putExtras 但我没有把它放进去Service class Code in Activity调用的类Service Intent mS
  • 在 iOS 中创建包含行和列的表格

    I would like to create a table in iOS that have some rows and columns We also have an option to add amounts to the table
  • 无法在 Mac 上安装图表/arithmoi

    我正在尝试安装diagrams 在阴谋集团沙箱中 并且它在期间失败arithmoi安装 给出以下消息 Preprocessing library arithmoi 0 4 1 1 no location info gt Warning Co
  • Android Studio预览片段

    我有以下布局文件
  • C#-Excel 互操作性

    我想从 C 4 0 VS 2010 Express Edition 调用 Excel Sheet 当我宣布 Microsoft Office Interop Excel ApplicationClass excel new Microsof
  • 将应用服务器从 GCM 迁移到 FCM 时,旧客户端会发生什么情况?

    我正在考虑迁移到 FCM 客户端的事情相当简单 您移动一些代码并完成它 但是 在应用程序服务器上 出于显而易见的原因 我还需要支持较旧的客户端 我需要知道将 GCM 项目迁移到 FCM 时会发生什么 FCM 是否也会自动将消息转发到基于 G
  • 如何从opencv中的图像中删除多余的空白? [复制]

    这个问题在这里已经有答案了 我有以下图像 这是一张收据图像 收据周围有很多空白区域 我想裁剪空白区域 我无法手动裁剪它 所以我正在寻找一种可以做到这一点的方法 剪了一张 从以下帖子中尝试了此代码 如何在 OpenCV 中删除图像中的空白 h
  • PHP 的同步 AMQP

    PHP 能否像 RPC 服务一样对待 AMQP 发送消息并阻塞直到返回回复 是否有任何好的示例 是否有任何库以易于使用的方式包装此类功能 我希望拥有代理消息传递系统的灵活性 但避免 Web 层需要了解其异步性质 当然 绝对 看看 RPC 风
  • Automapper:手动映射属性

    我刚刚开始使用 automapper 来映射 DTO实体 它似乎工作得很好 在某些特殊情况下 我只想映射某些属性并执行额外的检查 如果没有自动映射器 代码如下所示 使用fasterflect的PropertyExtensions objec