Ошибка «Типы сопоставления ошибок» в AutoMapper для членов с типом ICollection - PullRequest
0 голосов
/ 13 мая 2019

При попытке привести DTO к модели появляется следующее сообщение об ошибке.

MEMBER_Model model = Mapper.Map<MEMBER_Model>(item);

Типы сопоставления ошибок.

Типы сопоставления: T_MEMBER -> MEMBER_Model TL.CFM.DATA.T_MEMBER -> TL.CFM.CORE.MEMBER_Model

Тип Конфигурация карты: T_MEMBER -> MEMBER_Model TL.CFM.DATA.T_MEMBER -> TL.CFM.CORE.MEMBER_Model

НазначениеУчастник: MEMBER_GROUPs

Класс DTO:

public partial class T_MEMBER
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public T_MEMBER()
    {
        this.REL_MEMBER_GROUP = new HashSet<REL_MEMBER_GROUP>();
    }

    public decimal ID { get; set; }
    public string USERNAME { get; set; }
    public string PASSWORD { get; set; }
    public decimal IS_ACTIVE { get; set; }
    public decimal IS_DELETED { get; set; }
    public Nullable<decimal> CRE_BY { get; set; }
    public Nullable<System.DateTime> CRE_DATE { get; set; }
    public Nullable<decimal> UPD_BY { get; set; }
    public Nullable<System.DateTime> UPD_DATE { get; set; }
    public decimal PERSON_ID { get; set; }

}

Класс модели:

public class MEMBER_Model : _BaseModel
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public MEMBER_Model()
    {
        this.MEMBER_GROUPs = new HashSet<MEMBER_GROUP_Model>();
    }
    public override decimal ID { get; set; }
    public string USERNAME { get; set; }
    public string PASSWORD { get; set; }
    public bool IS_ACTIVE { get; set; }
    public bool IS_DELETED { get; set; }
    public override Nullable<decimal> CRE_BY { get; set; }
    public override Nullable<DateTime> CRE_DATE { get; set; }
    public override Nullable<decimal> UPD_BY { get; set; }
    public override Nullable<DateTime> UPD_DATE { get; set; }
    public decimal PERSON_ID { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<MEMBER_GROUP_Model> MEMBER_GROUPs { get; set; }

    public string Fullname
    {
        get
        {
            return string.Format("{0} {1}", FIRST_NAME, LAST_NAME);
        }
    }
}

Конфигурации AutoMapper:

public static void SetAutoMapperConfs()
{
    Mapper.Initialize(cfg =>
    {
        #region MEMBER_Model -1
        cfg.CreateMap<T_MEMBER, MEMBER_Model>()
            .ForMember(d => d.MEMBER_GROUPs, f => f.MapFrom(src => src.REL_MEMBER_GROUP))
            .ReverseMap();
        #endregion

        #region MEMBER_GROUP_Model -2
        cfg.CreateMap<REL_MEMBER_GROUP, MEMBER_GROUP_Model>()
            .ForMember(d => d.AUTH_GROUP, f => f.MapFrom(src => src.LKP_AUTH_GROUP))
            .ForMember(d => d.MEMBER, f => f.MapFrom(src => src.T_MEMBER))
            .ReverseMap();
        #endregion      

        #region AUTH_GROUP_Model -3
        cfg.CreateMap<LKP_AUTH_GROUP, AUTH_GROUP_Model>()
            .ForMember(d => d.GROUP_ROLEs, f => f.MapFrom(src => src.REL_GROUP_ROLE))
            .ForMember(d => d.MEMBER_GROUPs, f => f.MapFrom(src => src.REL_MEMBER_GROUP))
            .ReverseMap();
        #endregion

        #region GROUP_ROLE_Model -4
        cfg.CreateMap<REL_GROUP_ROLE, GROUP_ROLE_Model>()
            .ForMember(d => d.AUTH_GROUP, f => f.MapFrom(src => src.LKP_AUTH_GROUP))
            .ForMember(d => d.ROLE, f => f.MapFrom(src => src.LKP_ROLE))
            .ReverseMap();
        #endregion

        #region ROLE_Model -5
        cfg.CreateMap<LKP_ROLE, ROLE_Model>()
            //.ForMember(d => d.GROUP_ROLEs, f => f.MapFrom(src => src.REL_GROUP_ROLE))
            .ReverseMap();
        #endregion
    });
}

Числа на метках #region, показывающие поток отношений.

Как видите, # region ROLE_Model -5 имеет закомментированную строку.Эта строка вызывает проблему.( Примечание: Я думаю, что рекурсия начинается здесь впервые, и это может вызвать проблемы)

= ОБНОВЛЕНО =

Значения OutPut:

Возникло исключение: «AutoMapper.AutoMapperConfigurationException» в AutoMapper.dll. Frknc: AutoMapper.AutoMapperConfigurationException: найдены несопоставленные элементы.Просмотрите типы и членов ниже.Добавление пользовательского выражения сопоставления, игнорирование, добавление пользовательского преобразователя или изменение типа источника / назначения. Если конструктор не соответствует, добавьте c-аргумент без аргументов, добавьте необязательные аргументы или сопоставьте все параметры конструктора

=============================================================

AutoMapper создал эту карту типов для вас, но ваши типы не могут быть сопоставлены с использованием текущей конфигурации.REL_GROUP_ROLE -> MEMBER_GROUP_Model (список участников-получателей) TL.CFM.DATA.REL_GROUP_ROLE -> TL.CFM.CORE.MEMBER_GROUP_Model (список членов-получателей)

не отображенные свойства: ID MEMBER_54 * AUT_54_10H в AUTHAutoMapper.ConfigurationValidator.AssertConfigurationIsValid (IEnumerable`1 typeMaps) Брошено исключение: «AutoMapper.AutoMapperMappingException» в AutoMapper.dll.DATA.LKP_ROLE -> TL.CFM.CORE.ROLE_Model

Тип карты конфигурации: LKP_ROLE -> ROLE_Model TL.CFM.DATA.LKP_ROLE -> TL.CFM.CORE.ROLE_Model

Элемент назначения: GROUP_ROLEs ---> AutoMapper.AutoMapperConfigurationException: были найдены несопоставленные элементы.Просмотрите типы и членов ниже.Добавление пользовательского выражения сопоставления, игнорирование, добавление настраиваемого преобразователя или изменение типа источника / назначения. Если нет подходящего конструктора, добавьте c-аргумент без аргументов, добавьте необязательные аргументы или сопоставьте все параметры конструктора

=============================================================

AutoMapper создал эту карту типов для вас, но ваши типы не могут быть сопоставлены с использованием текущей конфигурации.REL_GROUP_ROLE -> MEMBER_GROUP_Model (Список участников-получателей) TL.CFM.DATA.REL_GROUP_ROLE -> TL.CFM.CORE.MEMBER_GROUP_Model (Список участников-получателей)

Не отображенные свойства: ID MEMBER_68 * 68_ME_H AUTHAutoMapper.ConfigurationValidator.AssertConfigurationIsValid (IEnumerable`1 typeMaps) в lambda_method (закрытие, LKP_ROLE, ROLE_Model, ResolutionContext) --- конец трассировки стека внутренних исключений ---
в lambda_method (закрытие, разрешение LKP_TROLE, LKP_ROLE): «AutoMapper.AutoMapperMappingException» в AutoMapper.dll1073 *

Тип Конфигурация карты: REL_GROUP_ROLE -> GROUP_ROLE_Model TL.CFM.DATA.REL_GROUP_ROLE -> TL.CFM.CORE.GROUP_ROLE_Model

Элемент назначения: ROLE ---> Типы ошибок AutoMapper.AutoMapper,

Типы отображения: LKP_ROLE -> ROLE_Model TL.CFM.DATA.LKP_ROLE -> TL.CFM.CORE.ROLE_Model

Тип конфигурации карты: LKP_ROLE -> ROLE_Model TL.CFM.DATA.LKP_ROLE>.CFM.CORE.ROLE_Model

Элемент назначения: GROUP_ROLEs ---> AutoMapper.AutoMapperConfigurationException: найдены несопоставленные элементы.Просмотрите типы и членов ниже.Добавление пользовательского выражения сопоставления, игнорирование, добавление настраиваемого преобразователя или изменение типа источника / назначения. Если нет подходящего конструктора, добавьте c-аргумент без аргументов, добавьте необязательные аргументы или сопоставьте все параметры конструктора

=============================================================

AutoMapper создал эту карту типов для вас, но ваши типы не могут быть сопоставлены с использованием текущей конфигурации.REL_GROUP_ROLE -> MEMBER_GROUP_Model (список участников-получателей) TL.CFM.DATA.REL_GROUP_ROLE -> TL.CFM.CORE.MEMBER_GROUP_Model (список членов-получателей)

не сопоставленные свойства: ID MEMBER_89 * 10_ME_H AUTHAutoMapper.ConfigurationValidator.AssertConfigurationIsValid (IEnumerable`1 typeMaps) в lambda_method (Closure, LKP_ROLE, ROLE_Model, ResolutionContext) --- Конец трассировки стека внутренней исключительной ситуации ---
в lambda_method (Closure, Resolution LKLE_Mode_Lambda_Model).Mapper.AutoMapper.IRuntimeMapper.Map [TSource, TDestination] (источник TSource, назначение TDestination, контекст ResolutionContext, IMemberMap memberMap) в lambda_method (закрытие, модель LKP_AUTH_GROUP, AUTH_GROUP_Model, исключение внутреннего отслеживания ResolutionContext) --- конецlambda_method (Закрытие, LKP_AUTH_GROUP, AUTH_GROUP_Model, ResolutionContext) Возникло исключение: «AutoMapper.AutoMapperMappingException» в AutoMapper.dll frknc: AutoMapper.AutoMapperMappingException:Типы отображения ошибок

типов карт:. LKP_AUTH_GROUP -> AUTH_GROUP_Model TL.CFM.DATA.LKP_AUTH_GROUP -> TL.CFM.CORE.AUTH_GROUP_Model

1095 * Тип конфигурация Карты: LKP_AUTH_GROUP -> AUTH_GROUP_Model TL.CFM.DATA.LKP_AUTH_GROUP -> TL.CFM.CORE.AUTH_GROUP_Model

Элемент-адресат: GROUP_ROLEs ---> AutoMapper.AutoMapperMappingException: типы сопоставления ошибок.

Типы сопоставления: REL_RO_ROL_ROL_ROL_ROL_RODCFM.DATA.REL_GROUP_ROLE - конфигурация> TL.CFM.CORE.GROUP_ROLE_Model

1101 * Тип карты: REL_GROUP_ROLE -> GROUP_ROLE_Model TL.CFM.DATA.REL_GROUP_ROLE -> TL.CFM.CORE.GROUP_ROLE_Model
1103 *Целевой элемент: ROLE ---> AutoMapper.AutoMapperMappingException: типы сопоставления ошибок.

Типы сопоставления: LKP_ROLE -> ROLE_Model TL.CFM.DATA.LKP_ROLE -> TL.CFM.CORE.ROLE_Model

Тип Конфигурация карты: LKP_ROLE -> ROLE_Model TL.CFM.DATA.LKP_ROLE -> TL.CFM.CORE.ROLE_Model

Элемент назначения: GROUP_ROLEs ---> AutoMapper.AutoMapperConfigurationException: были найдены несопоставленные элементы.Просмотрите типы и членов ниже.Добавление пользовательского выражения сопоставления, игнорирование, добавление настраиваемого преобразователя или изменение типа источника / назначения. Если нет подходящего конструктора, добавьте c-аргумент без аргументов, добавьте необязательные аргументы или сопоставьте все параметры конструктора

=============================================================

AutoMapper создал эту карту типов для вас, но ваши типы не могут быть сопоставлены с использованием текущей конфигурации.REL_GROUP_ROLE -> MEMBER_GROUP_Model (список участников-получателей) TL.CFM.DATA.REL_GROUP_ROLE -> TL.CFM.CORE.MEMBER_GROUP_Model (список членов-получателей)

не отображенные свойства: ID MEMBER_16 * * 11_17_ AUTHAutoMapper.ConfigurationValidator.AssertConfigurationIsValid (IEnumerable`1 typeMaps) в lambda_method (Closure, LKP_ROLE, ROLE_Model, ResolutionContext) --- Конец трассировки стека внутренней исключительной ситуации ---
в lambda_method (Closure, Resolution LKLE_ROLE, LKP_ROLE)AutoMapper.Mapper.AutoMapper.IRuntimeMapper.Map [TSource, TDestination] (TSource источник, место назначения TD, контекст ResolutionContext, IMemberMap memberMap) в lambda_method (закрытие, LKP_AUTH_GROUP, AUTH_GROUP_Model, ResolutionContext) --- конец внутреннего исключения трассировка стека --- в lambda_method (Закрытие, LKP_AUTH_GROUP, AUTH_GROUP_Model, ResolutionContext) --- конец внутреннего исключения трассировка стека --- в lambda_method (Закрытие, LKP_AUTH_GROUP, AUTH_GROUP_Model, ResolutionContext) Возникло исключение: «AutoMapper.AutoMapperMappingException» в AutoMapper.dll

1 Ответ

0 голосов
/ 13 мая 2019

Вы пытались игнорировать их в профиле и посмотреть, если ошибка не исчезнет?Если это не помогло, вы пытались изучить детали исключения?Следует сказать, какие члены не отображаются?ForAllOtherMemebers (х => x.Ignore ()).Дополнительная информация: dotnettutorials.net/lesson/ignore-using-automapper-in-csharp

Кроме того, вы не можете сопоставить ICollection с ICollection, поскольку они не являются конкретным типом.Например:

Источник может быть IEnumerable, но вывод может быть только списком.

...