2013-01-01 28 views
4

枚舉定義是AutoMapper枚舉用FPGA實現IMapperConfigurator到字節

public enum RowStatusEnum 
{ 
    Modified = 1, 
    Removed = 2, 
    Added = 3 
} 

public class RowStatusEnumConvertor : IMapperConfigurator 
{ 
    public void Cofigure() 
    { 
     Mapper.CreateMap<RowStatusEnum, byte>(); 
     Mapper.CreateMap<byte, RowStatusEnum >(); 
    } 
} 

我RowStatusEnumConvertor類配置autoMapper用FPGA實現IMapperConfigurator, 但不起作用此代碼,不,我想我的配置不正確或不映射此類型夠了, 請幫我

感謝

回答

3

我已複製你的問題。該解決方案非常簡單,不要配置AutoMapper並將枚舉的基本類型設置爲字節。就像這樣:

public enum RowStatusEnum : byte 
{ 
    Modified = 1, 
    Removed = 2, 
    Added = 3, 
} 

讓它工作:

byte x = 3; 
RowStatusEnum rowStatus = Mapper.Map<RowStatusEnum>(x); 
//The result will be: Added 
+0

我想配置IMapperConfigurator中的這個轉換,並在項目的所有地方使用,而無需重新配置 –

13

威爾這樣的事情對你的工作?

Classes.cs

namespace StackOverflow.RowStatus 
{ 
    public enum RowStatusEnum 
    { 
     Modified = 1, 
     Removed = 2, 
     Added = 3 
    } 
} 

AutoMapperConfigurator.cs

namespace StackOverflow.RowStatus 
{ 
    using System; 
    using System.Linq; 

    using AutoMapper; 

    public class MyProfile : Profile 
    { 
     protected override void Configure() 
     { 
      Mapper.CreateMap<byte, RowStatusEnum>().ConvertUsing(
       x => Enum.GetValues(typeof(RowStatusEnum)) 
         .Cast<RowStatusEnum>().First(y => (byte)y == x)); 
      Mapper.CreateMap<RowStatusEnum, byte>().ConvertUsing(
       x => (byte)x); 
     } 
    } 
} 

MappingTests.cs

namespace StackOverflow.RowStatus 
{ 
    using AutoMapper; 

    using NUnit.Framework; 

    [TestFixture] 
    public class MappingTests 
    { 
     [Test] 
     public void AutoMapper_Configuration_IsValid() 
     { 
      Mapper.Initialize(m => m.AddProfile<MyProfile>()); 
      Mapper.AssertConfigurationIsValid(); 
     } 

     [TestCase(1, Result = RowStatusEnum.Modified)] 
     [TestCase(2, Result = RowStatusEnum.Removed)] 
     [TestCase(3, Result = RowStatusEnum.Added)] 
     public RowStatusEnum AutoMapper_ConvertFromByte_IsValid(
                byte rowStatusEnum) 
     { 
      Mapper.Initialize(m => m.AddProfile<MyProfile>()); 
      Mapper.AssertConfigurationIsValid(); 
      return Mapper.Map<byte, RowStatusEnum>(rowStatusEnum); 
     } 

     [TestCase(RowStatusEnum.Modified, Result = 1)] 
     [TestCase(RowStatusEnum.Removed, Result = 2)] 
     [TestCase(RowStatusEnum.Added, Result = 3)] 
     public byte AutoMapper_ConvertFromEnum_IsValid(
                RowStatusEnum rowStatusEnum) 
     { 
      Mapper.Initialize(m => m.AddProfile<MyProfile>()); 
      Mapper.AssertConfigurationIsValid(); 
      return Mapper.Map<RowStatusEnum, byte>(rowStatusEnum); 
     } 
    } 
} 
+1

以下幾行是關鍵點:) Mapper.Initialize(m => m.AddProfile ()); Mapper.AssertConfigurationIsValid(); Thanks感謝Mightyuke – Vincent