Коллекции Automapper - PullRequest
       3

Коллекции Automapper

4 голосов
/ 08 мая 2011

Я прочитал множество других постов и, похоже, не могу понять, что происходит, поэтому пришло время для какой-то помощи.

Я пытаюсь сопоставить свои доменные объекты, которые содержат коллекции, с dtos, также содержащим коллекции.

Вот примитивный пример; (заранее извиняюсь за стену кода, я старался сделать ее как можно короче):

Сущность

public class Foo
{
    public Foo()
    {
        Bars = new List<Bar>();
    }
    public string Foo1 { get; set; }
    public ICollection<Bar> Bars { get; set; }
}
public class Bar
{
    public string Bar1 { get; set; }
}

DTOS

public class FooDto
{
    public FooDto()
    {
        Bars = new List<BarDto>();
    }
    public string Foo1 { get; set; }
    public IEnumerable<BarDto> Bars { get; set; }
}
public class BarDto
{
    public string Bar1 { get; set; }
}

Карты

Mapper.CreateMap<Foo, FooDto>();
Mapper.CreateMap<ICollection<Bar>, IEnumerable<BarDto>>();

Тесты

// Arrange
var e = new Foo
{
    Foo1 = "FooValue1",
    Bars = new List<Bar>
    {
        new Bar
        {
             Bar1 = "Bar1Value1"
        },
        new Bar
        {
            Bar1 = "Bar2Value1"
        }
    }
};


// Act
var o = Mapper.Map<Foo, FooDto>(e);

// Assert

Mapper.AssertConfigurationIsValid();
Assert.AreEqual(e.Foo1, o.Foo1);
Assert.IsNotNull(o.Bars);
Assert.AreEqual(2, o.Bars.Count());

Я не получаю никаких ошибок конфигурации, и Foo1 очень хорошо отображает.

o.Bars - это Castle.Core.Interceptor.IInterceptor[] и не содержит значений из моего доменного объекта ...

Что мне здесь не хватает?

1 Ответ

11 голосов
/ 08 мая 2011

Вместо:

Mapper.CreateMap<ICollection<Bar>, IEnumerable<BarDto>>();

попробуйте просто:

Mapper.CreateMap<Bar, BarDto>();

AutoMapper позаботится об остальном .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...