2016-08-16 2 views
2

Я использую Automapper для сопоставления класса с нулевой коллекцией для адресата с той же коллекцией. Мне нужно, чтобы сборник получал значение null.Automapper: настройка AllowNullCollections в профиле

В классе Профиль, называемом AllowNullCollections, есть свойство. Это не влияет на отображение. Если я установил cfg.AllowNullCollections в значение True, то сопоставление оставляет коллекцию назначения нулевой (как я хочу).

Я не могу установить AllowNullCollections для True для всех сопоставлений в моей системе, он должен применяться только к моему профилю.

using System.Collections.Generic; 
using AutoMapper; 
using NUnit.Framework; 
using Assert = NUnit.Framework.Assert; 


namespace Radfords.FreshCool.Web.Tests 
{ 
    [TestFixture] 
    [Category("UnitTest")] 
    class AutomapperTests 
    { 
     private IMapper _mapper; 

     // this says that AllowNullCollections does work at the profile level, in May. 
     //https://github.com/AutoMapper/AutoMapper/issues/1264 

     [SetUp] 
     public void SetUp() 
     { 

      var config = new MapperConfiguration(cfg => 
      { 
       cfg.AddProfile<TestMappingProfile>(); 
       // I want the profile to set the configuration, if I set this here the test passes 
       //cfg.AllowNullCollections = true; 
      }); 
      _mapper = config.CreateMapper(); 
     } 


     [Test] 
     [Category("UnitTest")] 
     public void MapCollectionsTest_MustBeNull() 
     { 
      var actual = _mapper.Map<Destination>(new Source()); 

      Assert.IsNull(actual.Ints, "Ints must be null."); 
     } 

    } 

    internal class TestMappingProfile : Profile 
    { 
     public TestMappingProfile() 
     { 
      AllowNullCollections = true; 

      CreateMap<Source, Destination>(); 
     } 
    } 

    internal class Source 
    { 
     public IEnumerable<int> Ints { get; set; } 
    } 

    internal class Destination 
    { 
     public IEnumerable<int> Ints { get; set; } 
    } 
} 
+0

Я думаю, что это ошибка. Я передал вопрос об этом репо (https://github.com/AutoMapper/AutoMapper/issues/1618), чтобы получить дополнительную информацию. –

+0

Но одно можно добавить: «Я не могу установить AllowNullCollections для True для всех сопоставлений в моей системе, он должен применяться только к моему профилю ». - Это намерение. Профили не изменяют глобальные настройки, а только настройки для типов, которые они отображают. –

+0

Спасибо за ваш ответ. Да, чтобы уточнить, я не могу установить allownullcollections в true в config, потому что он будет применяться глобально, я хочу установить allownullcollections на true на уровне профиля, только для моего конкретного сопоставления. – WilliamsC

ответ

0

Will Ray представила вопрос о github. Текущее состояние состоит в том, что вы не можете установить AllowNullCollections на уровне прибыли, вы должны установить его на уровне конфигурации.

0

Вы можете заменить TestMappingProfile CTOR с ниже, и он должен работать:.

общественного TestMappingProfile() {

CreateMap() ForMember (Dest => dest.Ints, опт => опт .Condition (src => (src.Ints! = Null)));
}

+0

Спасибо за предложение. Классы, которые я собираю, имеют множество коллекций, поэтому определение отображения на уровне участника не является идеальным. – WilliamsC

Смежные вопросы