2015-12-03 3 views
0

Можете ли вы AutoMap на объекты с детьми сами по себе? В этом примере:C# AutoMapper с ребенком сам по себе

public class Book 
{ 
    public int? BookKey { get; set; } 
    public Categories bookCategories { get; set; } 
} 
public class Categories 
{ 
    public int? CategoryKey { get; set; } 
    public List<Book> RecommendedBooks { get; set; } 
} 


Mapper.CreateMap<Common.BookList, Book>().IgnoreAllNonExisting(); 
Mapper.AssertConfigurationIsValid(); 

Mapper.CreateMap<Common.Categories, Categories>().IgnoreAllNonExisting(); 
Mapper.AssertConfigurationIsValid(); 

Перестановка последние две карты вокруг приводит к возникновению ошибок каждый раз. Во-первых, означает, что он не понимает категории, а категории сначала означает, что он не понимает книги.

AutoMapper.AutoMapperConfigurationException: следующее свойство в Common.BookList/Common.Categories не может быть отображено.

+1

Удалите первый 'Mapper.AssertConfigurationIsValid();'. Вам нужно только позвонить ему один раз, как только вы настроите все свои правила сопоставления. Вы просите его построить карту для «Книги», но пока не сказали, как сделать отображение «bookCategories». – Rob

+0

Как выглядит COmmon.BookList? Как я вижу, вы пытаетесь сопоставить Booklist to Book. Сначала вам нужно создать карту для книги, чем одну для категорий. Затем вы можете сопоставить Книгу, потому что у вас уже есть свои сопоставления. – jpgrassi

+0

Ответ Роба был именно тем, что мне нужно! Я всегда предполагал, что мне нужно было вызвать AssertConfigurationIsValid после каждого! Повторите попытку в качестве ответа, и я поднимусь. –

ответ

1

Необходимо только подтвердить правильность конфигурации . Возможно, имеет смысл сделать это несколько раз, чтобы упростить отладку (что дает вам исключение ближе к местоположению кода сопоставления), но в этом случае карты зависят друг от друга (для построения карты Book требуется, чтобы Automapper умеете сопоставлять bookCategories).

Изменить код ниже, и она будет прекрасно работать

Mapper.CreateMap<Common.BookList, Book>().IgnoreAllNonExisting(); 
Mapper.CreateMap<Common.Categories, Categories>().IgnoreAllNonExisting(); 
Mapper.AssertConfigurationIsValid(); 
Смежные вопросы