Выполнение нескольких правил для строк с нулевым значением в AutoMapperC#

Место общения программистов C#
Ответить
Anonymous
 Выполнение нескольких правил для строк с нулевым значением в AutoMapper

Сообщение Anonymous »

Типы источника/назначения

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

/// This is where the string? -> string? mapping is required.
class ARequestModel {
string? ForeignKeyId
}

class ADbModel {
string? ForeignKeyId
}

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

/// This is where the string? -> string mapping is required
class BDbModel {
string? Value;
}

class BResponseModel
{
// This should always be at least string.Empty
string Value;
}
Конфигурация сопоставления

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

// Empty string is converted to null. This is used to unset values in FK Ids.
CreateMap().ConvertUsing((src, dest) => src == string.Empty ? null : src ?? dest);
// null string is coerced to empty string for backward compatibility
CreateMap().ConvertUsing((src, dest) => string.IsNullOrEmpty(dest) ? src ?? string.Empty : src ?? dest);
Версия: 13.0.1
Хотя я ожидаю, что оба преобразователя значений будут работать, выполняется только последнее преобразование. >
Шаги по воспроизведению

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

[Fact]
public void Map_UpdateRequestModelAndPage_UnsetsPlanId()
{
PageDbModel page = new PageDbModel
{
Id = "ID",
CreatedAt = DateTime.UtcNow,
UserId = "USER_ID",
PlanId = "PLAN_ID"
};

PageUpdateRequestModel updateRequestModel = new PageUpdateRequestModel
{
// ignored
UserId = null,
// results in null destination
MaintenancePolicyId = ""
};

PageDbModel newPage = _mapper.Map(updateRequestModel, page);

Assert.Equal(page.UserId, newPage.UserId);
Assert.Null(newPage.MaintenancePolicyId);
}

[Fact]
public void Map_MetadataToMetadataResponseWithNullValue_ReturnsEmptyStringValue()
{
MetadataDbModel metadata = new MetadataDbModel {
Id = "ID",
CreatedAt = DateTime.UtcNow,
UpdatedAt = DateTime.UtcNow,
Key = "Key",
Value = null
};

var responseModel = _mapper.Map(metadata);

Assert.Equal(string.Empty, dto.Value);
}
Я подозреваю, что это так, потому что C# рассматривает обе строки? и строка должны быть одинаковыми, а тип, допускающий значение NULL, просто как-то связан с анализом кода.


Подробнее здесь: https://stackoverflow.com/questions/789 ... automapper
Ответить

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

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

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

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

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