2015-05-05 3 views
0

Как я могу использовать automapper для сопоставления свойства ICollection в моем классе модели.Как использовать AutoMapper для Map ManytoMany relaionship

Вот пример:

Mapper.CreateMap<Planiranje.Planning.Data.User, Model.Users>() 
       .ForMember(dst => dst.UserId, opts => opts.MapFrom(src => src.UserId)) 
       .ForMember(dst => dst.Username, opts => opts.MapFrom(src => src.Username)) 
       .ForMember(dst => dst.Firstname, opts => opts.MapFrom(src => src.Firstname)) 
       .ForMember(dst => dst.Lastname, opts => opts.MapFrom(src => src.Lastname)) 
       .ForMember(dst => dst.Email, opts => opts.MapFrom(src => src.Email)) 
       .ForMember(dst => dst.Segment, opts => opts.MapFrom(src => src.Segment)) 
       .ForMember(dst => dst.Groups, opts => opts.MapFrom(src => src.Groups)); 

Где группы является OfType ICollection.

С этим отображением я получаю следующее сообщение об ошибке

The following property on System.Text.RegularExpressions.Group cannot be mapped: 
    Groups 
Add a custom mapping expression, ignore, add a custom resolver, or modify the destination type System.Text.RegularExpressions.Group. 
Context: 
    Mapping to property Groups from Planiranje.Planning.Data.Group to System.Text.RegularExpressions.Group 
    Mapping to property Groups from System.Collections.Generic.ICollection`1[[Planiranje.Planning.Data.Group, Planiranje, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] to System.Collections.Generic.ICollection`1[[System.Text.RegularExpressions.Group, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] 
    Mapping from type Planiranje.Planning.Data.User to Planiranje.Model.Users 
Exception of type 'AutoMapper.AutoMapperConfigurationException' was thrown. 

После того как я избавиться от Syste.Text.RegularExpression я получил следующее сообщение об ошибке

The following property on Planiranje.Model.Groups cannot be mapped: 
    Groups 
Add a custom mapping expression, ignore, add a custom resolver, or modify the destination type Planiranje.Model.Groups. 
Context: 
    Mapping to property Groups from Planiranje.Planning.Data.Group to Planiranje.Model.Groups 
    Mapping to property Groups from System.Collections.Generic.ICollection`1[[Planiranje.Planning.Data.Group, Planiranje, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] to System.Collections.Generic.ICollection`1[[Planiranje.Model.Groups, Planiranje, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] 
    Mapping from type Planiranje.Planning.Data.User to Planiranje.Model.Users 
Exception of type 'AutoMapper.AutoMapperConfigurationException' was thrown. 

Кроме того, вот мой источник/классы Источник Отдых на классы

namespace Planiranje.Planning.Data 
{ 
    using System; 
    using System.Collections.Generic; 

    public partial class User 
    { 
     public User() 
     { 
      this.Groups = new HashSet<Group>(); 
     } 

     public int UserId { get; set; } 
     public string Username { get; set; } 
     public string Firstname { get; set; } 
     public string Lastname { get; set; } 
     public string Email { get; set; } 
     public string Segment { get; set; } 

     public virtual ICollection<Group> Groups { get; set; } 
    } 
} 

namespace Planiranje.Planning.Data 
{ 
    using System; 
    using System.Collections.Generic; 

    public partial class Group 
    { 
     public Group() 
     { 
      this.Users = new HashSet<User>(); 
     } 

     public int GroupId { get; set; } 
     public string GroupName { get; set; } 

     public virtual ICollection<User> Users { get; set; } 
    } 
} 

и пункты назначения:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.ComponentModel; 
using System.Diagnostics; 

namespace Planiranje.Model 
{ 
    public class Users : ModelBase,IEntity 
    { 
     private int _userId; 
     public int UserId 
     { 
      get 
      { 
       return _userId; 
      } 
      set 
      { 
       _userId = value; 
       RaisePropertyChanged("UserId"); 
      } 
     } 
     private string _username; 
     public string Username 
     { 
      get 
      { 
       return _username; 
      } 
      set 
      { 
       _username = value; 
       RaisePropertyChanged("Username"); 
      } 
     } 
     private string _firstname; 
     public string Firstname 
     { 
      get 
      { 
       return _firstname; 
      } 
      set 
      { 
       _firstname = value; 
       RaisePropertyChanged("Firstname"); 
      } 
     } 
     private string _lastname; 
     public string Lastname 
     { 
      get 
      { 
       return _lastname; 
      } 
      set 
      { 
       _lastname = value; 
       RaisePropertyChanged("Lastname"); 
      } 
     } 
     private string _email; 
     public string Email 
     { 
      get 
      { 
       return _email; 
      } 
      set 
      { 
       _email = value; 
       RaisePropertyChanged("Email"); 
      } 
     } 
     private string _segment; 
     public string Segment 
     { 
      get 
      { 
       return _segment; 
      } 
      set 
      { 
       _segment = value; 
       RaisePropertyChanged("Segment"); 
      } 

     } 

     private IList<Groups> _groups; 
     public virtual IList<Groups> Groups 
     { 
      get 
      { 
       return _groups; 
      } 
      set 
      { 
       _groups = value; 
       RaisePropertyChanged("Groups"); 
      } 
     } 

     public ModelEntityState ModelEntityState { get; set;} 

    } 
} 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.ComponentModel; 
using System.Diagnostics; 

namespace Planiranje.Model 
{ 
    public class Groups :ModelBase, IEntity 
    { 
     private int _groupId; 
     public int GroupId 
     { 
      get 
      { 
       return _groupId; 
      } 
      set 
      { 
       _groupId = value; 
       RaisePropertyChanged("UserId"); 
      } 
     } 
     private string _groupname; 
     public string GroupName 
     { 
      get 
      { 
       return _groupname; 
      } 
      set 
      { 
       _groupname = value; 
       RaisePropertyChanged("GroupName"); 
      } 
     } 

     private ICollection<Users> _users; 
     public virtual ICollection<Users> Users 
     { 
      get 
      { 
       return _users; 
      } 
      set 
      { 
       _users = value; 
       RaisePropertyChanged("Users"); 
      } 
     } 

     public ModelEntityState ModelEntityState { get; set; } 
    } 
} 
+0

Только один комментарий - все эти MapFroms совершенно бессмысленны. Не создавайте конфигурации для отображения свойств одного и того же имени. Это «Авто» «AutoMapper». Также, пожалуйста, отправьте свои исходные/целевые типы. –

ответ

0

AutoMapper будет отображать группу ICollection просто отлично. Это не ваша проблема. Проблема описывается Exception является:

  • Ваш источник недвижимости Группа типа Planiranje.Planning.Data.Group
  • Но ваше назначение свойство Group имеет тип System.Text.RegularExpressions.Group

Я предполагаю, что адресатом тип недвижимости это ошибка.

Я предполагаю, что в вашем файле Model.Users.cs есть using System.Text.RegularExpressions наверху.

Если это так, то лучше исправить может быть, чтобы добавить

using Group=Planiranje.Planning.Data.Group; 

к началу Model.Users.cs

+0

Привет Крис, вы были правы в использовании System.Text.RegularExpressions. Я удалил то же самое, но все же получаю то же сообщение об ошибке, что и я. Любые другие мысли. Спасибо – Almir

+0

Можете ли вы изменить свой вопрос, чтобы показать новое сообщение об ошибке после того, как вы избавились от System.Text.Обычные выражения ? Если после повторной компиляции это сообщение остается прежним, то Model.Users.Group все еще имеет тип System.Text.RegularExpressions.Group –

+0

Я только что редактировал оригинальный вопрос. – Almir

0

Я думаю, что проблема заключается в том, что так же, как ваш картографирования

Mapper.CreateMap<Planiranje.Planning.Data.User, Model.Users>() 

вы должны также определяют отображение

Mapper.CreateMap<Planiranje.Planning.Data.Group,Planiranje.Model.Groups>() 

И вы должны продолжать делать это рекурсивно для всех типов, от которых зависят ваши классы.

Я видел, что конфигурации AutoMapper очень большие, как это происходит, когда есть целые семейства классов.

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

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