gpt4 book ai didi

c# - Automapper - 将实体映射到枚举

转载 作者:行者123 更新时间:2023-11-30 17:04:20 25 4
gpt4 key购买 nike

我正在尝试将一个实体映射到一个枚举。当我在寻找资源时,我发现了这个:

using Should;

public enum OrderStatus : short
{
InProgress = 0,
Complete = 1
}

public enum OrderStatusDto
{
InProgress = 0,
Complete = 1
}

[Test]
public void Example()
{
Mapper.Map<OrderStatus, OrderStatusDto>(OrderStatus.InProgress)
.ShouldEqual(OrderStatusDto.InProgress);
Mapper.Map<OrderStatus, short>(OrderStatus.Complete).ShouldEqual((short)1);
Mapper.Map<OrderStatus, string>(OrderStatus.Complete).ShouldEqual("Complete");
Mapper.Map<short, OrderStatus>(1).ShouldEqual(OrderStatus.Complete);
Mapper.Map<string, OrderStatus>("Complete").ShouldEqual(OrderStatus.Complete);
}

但我认为这仅适用于枚举到枚举的映射。因为当我尝试使用 .ShouldEqual 时,智能感知找不到它。在该代码块中,有一个名为 Should 的引用,但我无法在任何地方找到它的引用。

关于如何使用自动映射器在枚举和实体/类之间进行映射有什么想法吗?关于使用 Should 有什么想法吗?

@我更新了这个问题,因为在没有看到实际代码的情况下,很难考虑解决方案。以下是可能需要的代码片段:

public class ParameterEnum
{
/// <summary>
/// Enum Sayisi: 2650, Son Guncelleme Tarihi: 21.2.2013 09:40:37
/// </summary>
public enum Parameters : int
{
...
IsEmriTuruIsTalebi = 138,
<summary>
Adi: Kalite Öneri; ID: 2218; Seviyesi: 3; Aciklamasi: ; Aktif Mi: True
</summary>
...}}

这是法线贴图完成的地方:

                    isEmriEntity.IsEmriTuruId = (int)ParameterEnum.Parameters.IsEmriTuruIsTalebi;

最佳答案

您应该查看 ITypeConverter。像这样的东西应该可以完成这项工作:

Mapper.CreateMap<OrderStatus, OrderStatusDto>().ConvertUsing(new OrderStatusConverter());

你的转换器看起来像这样:

public class OrderStatusConverter: ITypeConverter<OrderStatus, OrderStatusDto>
{
public OrderStatusDto Convert(OrderStatus source)
{
return (OrderStatusDto)source;
}
}

这应该足以将相同的方法应用于您的 DTO 中的任何其他跨类型映射。

编辑:

关于您的枚举转换错误,为了清楚起见,使用此作为示例(枚举不是 DTO):

    public enum ExampleEnum : short
{
SomeValue,
SomeOtherValue,
BigValue = 100,
}

public enum AnotherEnum
{
Foo,
Bar,
}

这应该使枚举转换更清晰(根本不要转换为 int)。

    private void Test()
{
// Casting to int only works when the value is 0

// This works (SomeValue = 0)
AnotherEnum example = (int) ExampleEnum.SomeValue;

// This won't even compile (SomeOtherValue = 1)
AnotherEnum example2 = (int) ExampleEnum.SomeOtherValue;

// Casting to another enum works fine
AnotherEnum example2 = (AnotherEnum) ExampleEnum.SomeOtherValue;

// Just be careful of values that don't exist in the target enum
// This will compile even though it won't work at run-time (BigValue = 100)
AnotherEnum example2 = (AnotherEnum) ExampleEnum.BigValue;
}

关于c# - Automapper - 将实体映射到枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17567840/

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