Обработка NULL для строки с ForallPropertyMaps Throws Automapper.AutomApperMappingException: «Типы сопоставления ошибок»C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Обработка NULL для строки с ForallPropertyMaps Throws Automapper.AutomApperMappingException: «Типы сопоставления ошибок»

Сообщение Anonymous »

Конфигурация Mapper (работа с simpleInjector )

Код: Выделить всё

public IMapper GetMapper()
{
var configExpression = new MapperConfigurationExpression();
configExpression.ConstructServicesUsing(_container.GetInstance);

configExpression.ForAllPropertyMaps(pm => pm.DestinationType == typeof(string), (pm, map) =>
{
map.MapFrom(src => src ?? string.Empty);
});

configExpression.AddProfile(new ItemMasterProfileProfile());
// ... other profiles

var config = new MapperConfiguration(configExpression);

config.AssertConfigurationIsValid();

return new Mapper(config, t => _container.GetInstance(t));
}
< /code>
Есть несколько извлечено из объекта базы данных с несколькими свойствами < /p>
public class ItemCopyTransactionData : ITransactionData
{
...
public double? POAutocloseTolerancePercent { get; set; }
public double? MOAutocloseTolerancePercent { get; set; }
}
И есть itemmasterprofileprofile профиль с определенной картой от itemcopytransactiondata to itmb03

Код: Выделить всё

CreateMap()
...
.ForPath(d => d.POAutocloseTolerancePercent.Value, o => o.MapFrom(s => s.POAutocloseTolerancePercent))
.ForPath(d => d.MOAutocloseTolerancePercent.Value, o => o.MapFrom(s => s.MOAutocloseTolerancePercent));
, где Itmb03 от внешней библиотеки, и его определение выглядит как

Код: Выделить всё

public sealed class ITMB03 : TransactionId, ITMB03._ITMB03
{
[ComVisible(true)]
public interface _ITMB03
{
// Other similar properties

[DispId(88)]
ITransactionField POAutocloseTolerancePercent
{
[DispId(505)]
get;
}

[DispId(88)]
public ITransactionField POAutocloseTolerancePercent => (TransactionField)FieldList[88];

// Other similar properties
}
}

public interface ITransactionField
{
[DispId(0)]
string Value { get; set; }

[DispId(1)]
TransactionFieldBehavior Behavior { get; }

[DispId(2)]
int Number { get; }

[DispId(3)]
TransactionFieldType Type { get; }

[DispId(4)]
bool IsRequired { get; }

[DispId(5)]
short Length { get; }

[DispId(6)]
string Name { get; }
}
При вызове отображения из itemcopyTransactionData до ITMB03 Приведенное ниже исключение выброшено

Код: Выделить всё

AutoMapper.AutoMapperMappingException: 'Error mapping types.'
Inner Exception
NullReferenceException: Object reference not set to an instance of an object.
< /code>
Error mapping types.

Mapping types:
ItemCopyTransactionData -> ITMB03
Api.Models.ItemCopyTransactionData -> X.Transaction.ITMB03

Type Map configuration:
ItemCopyTransactionData -> ITMB03
Api.Models.ItemCopyTransactionData -> X.Transaction.ITMB03

Destination Member:
POAutocloseTolerancePercent.Value
< /code>
In this case POAutocloseTolerancePercent
is null и это должно быть, но мне интересно, почему он не обрабатывается должным образом конфигурацией Mapper, которая в случае null исходный элемент должен составить его на string.empty ?

Подробнее здесь: https://stackoverflow.com/questions/794 ... mappermapp
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»