0

Я много раз искал, но не знаю, как собирать карты с помощью Automapper.Сопоставление коллекций с Automapper?

Дано:

Public Class PostSummaryDTO 
     Public Property PostId As Integer 
     Public Property PostGuid As Guid 
     Public Property PostTitle As String 
     Public Property PostSummary As String 
     Public Property PostDateCreated As DateTime 
     Public Property PostIsPublished As Boolean 
     Public Property PostText As String 
     Public Property PostCategory As ICollection(Of be_Categories) 
     Public Property PostTag As ICollection(Of be_PostTag) 
     Public Author As String 
    End Class 

и

Public Class be_PostsViewModel 
     Public Property Id As Integer 
     Property Author As String 
     <DisplayName("Title")> <Required(ErrorMessage:="Your post must have a title")> 
      Public Property PostTitle As String 
     <DisplayName("My Snarky Text")> Public Property PostSummary As String 
     <DisplayName("Post")> Public Property PostText As String 
     <UIHint("DateCreated")> <DisplayName("Date Created")> Property PostDateCreated  
      As DateTime? 
     <DisplayName("Publish")> Public Property PostIsPublished As Boolean 
     Public Property PostGuid As Guid 
     Public Property BlogId As Guid 
     <DataType(DataType.MultilineText)> <UIHint("Tags")> <DisplayName("Tags")> 
      Public Property PostTags As ICollection(Of be_PostTag) 
     <DisplayName("Category")> <UIHint("Categories")> Public Property 
      PostCategory As ICollection(Of CategoriesViewModel) 

    End Class 

Как я карта Public Property PostCategory As ICollection(Of be_Categories) в Public Property PostCategory As ICollection(Of CategoriesViewModel)

+0

проверить этот вопрос http://stackoverflow.com/questions/13687240/c-sharp-automapper-map-collection-of-objects, он должен быть простым, всего на карте < PostCategory, CategoriesViewModel>, и этого будет достаточно, если у вас есть коллекция или список. –

ответ

0

После создания отображения для be_Categories в CategoriesViewModel и PostSummaryDTO к be_PostsViewModel AutoMapper автоматически понять, что и позаботьтесь обо всем остальном.

' Do this only once in your application 
Mapper.CreateMap(Of be_Categories, CategoriesViewModel)() 
Mapper.CreateMap(Of PostSummaryDTO, be_PostsViewModel)() 

Dim yourDTO = New PostSummaryDTO() 
' Set all your DTO values here 

' Call AutoMapper 
Dim vm As be_PostsViewModel = Mapper.Map(Of be_PostsViewModel)(yourDTO) 

vm должны теперь иметь все свои свойства хорошо сопоставляются, в том числе ваш Collection. Он может автоматически отображать коллекции, когда их «внутренние типы» отображаются. Вы можете увидеть все поддерживаемые коллекции here.

Я только что испытал это, и он работает.

Update: Если вы просто хотите отобразить коллекции прямо от одной переменной в другую, вы должны сделать это:

' Create a mapping for the types inside the collection 
Mapper.CreateMap(Of be_Categories, CategoriesViewModel)() 

' Declare a collection of be_Categories 
Dim col As New List(Of be_Categories)() 
' Insert all the items 
Dim cat = New be_Categories() 
col.Add(cat) 

' Call AutoMapper stating that you want a List as return 
Dim vm As List(Of CategoriesViewModel) = Mapper.Map(Of List(Of CategoriesViewModel))(col) 

Опять же, он будет автоматически создавать List(Of CategoriesViewModel) для вас, потому что вы создали отображение для внутренних типов.

Тип несвязанных, но учтите, что AutoMapper не поймет, что Id и PostId ссылаются на эту же собственность. Вы можете узнать обо всех конвенций AutoMapper в here

+0

Что именно вы подразумеваете под «атрибутами»? Извините за немой вопрос, но новичок в Automapper, и не могли бы вы привести пример? спасибо –

+0

Я имею в виду, что вы задали все значения в исходном объекте. Подобно 'dto.PostTitle =" Title "', 'dto.PostText =" Text "'. Код, который я использовал в своем ответе, является полным рабочим примером. Вы попробовали? –

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

  • Нет связанных вопросов^_^