Automapper-将实体映射到枚举

本文关键字:枚举 映射 实体 Automapper- | 更新日期: 2023-09-27 18:21:51

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

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时,intellisense找不到它。在那个代码块中,有一个名为Should的引用,但我在任何地方都找不到其引用。

关于如何使用automapper在enum和实体/类之间进行映射,有什么想法吗?关于使用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;

Automapper-将实体映射到枚举

您应该研究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;
    }