gpt4 book ai didi

c# - 使用 AutoMapper 创建一个对象,该对象表示比较两个其他对象的结果

转载 作者:行者123 更新时间:2023-11-30 15:33:09 24 4
gpt4 key购买 nike

假设有以下类:

public class MyEntity
{
public string FirstName;
public string LastName;
}

我想使用 AutoMapper 比较两个 MyEntity 对象,并创建一个新的 MyEntity 对象,它只包含两个之间的差异对象。相等的属性将在新对象中产生一个 null 值。

例如,我想要以下几行:

MyEntity entity1 = new MyEntity() { FirstName = "Jon", LastName = "Doh" };
MyEntity entity2 = new MyEntity() { FirstName = "Jon", LastName = "The Great" };
MyEntity diffEntity = Mapper.Map...; // Compare the two objects using AutoMapper

产生以下 diffEntity 值:

{
FirstName: null,
LastName: "The Great"
}

最终目标是使客户端移动应用程序能够将仅包含对实体所做更改的 DTO 发送到 ASP.NET MVC WebAPI 服务器应用程序。

请假设我有许多需要相同处理的实体类,并且我想避免为每次比较手动编写属性名称。

这可能吗?

最佳答案

这是可能的,您可能想要创建一个自定义转换器。也许使用这个问题中的表达式树: Hows to quick check if data transfer two objects have equal properties in C#?

public class DifferenceConverter<T> : ITypeConverter<T, T>
{
public T Convert(ResolutionContext context)
{
// Code to check each property to see if different, could be done with
// Reflection or by writing some Dynamic IL.
// Personally I would use Reflection to generate (then cache) an Expression tree
// to compare each object at native speeds..

return differenceObject;
}
}

一旦你有了这个,你就可以使用以下方法将它附加到你的 AutoMapper 上:

AutoMapper.Mapper.CreateMap<MyEntity, MyEntity>().ConvertUsing<DifferenceConverter<MyEntity>>();

然后你可以使用通常的模式:

var originalObject = new MyEntity();
var modifiedObject = new MyEntity();

Mapper.Map(originalObject , modifiedObject);

// Now modifiedObject contains the differences.

myService.Post(modifiedObject);

关于c# - 使用 AutoMapper 创建一个对象,该对象表示比较两个其他对象的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17762707/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com