Я получаю Value cannot be null. Parameter name: querySource
ошибку от Automapper при сопоставлении свойств навигации.
.ForMember(p => p.Region, opt => opt.MapFrom(p =>
(p.RegAddressId.HasValue && p.RegAddress.CountryId.HasValue)?
p.RegAddress.Country.Region: p.Nationality.Region))
RegAddressId имеет значение Nullable, а NationalityId не имеет значение NULL.
public class User : IEntity
{
...
public int NationalityId { get; set; }
public int? RegAddressId { get; set; }
public virtual LkupNationality Nationality { get; set; }
public virtual Address RegAddress { get; set; }
}
Я использую Automapper Версия7.0.1 и EF Core 2.0.3
Ниже приведено выражение, полученное из
var expression = pendingRegs.ProjectTo<PendingClientModel>().Expression;
Region = .If (.If (
($dtoUserRegistration.RegAddressId).HasValue && (($dtoUserRegistration.RegAddress).CountryId).HasValue && $dtoUserRegistration.RegAddress !=
null && ($dtoUserRegistration.RegAddress).Country != null
) {
(($dtoUserRegistration.RegAddress).Country).Region
} .Else {
($dtoUserRegistration.Nationality).Region
} == null) {
null
} .Else {
.New Cft.Fbo.Domain.ViewModels.ListItemModel(){
Desc = (.If (
($dtoUserRegistration.RegAddressId).HasValue && (($dtoUserRegistration.RegAddress).CountryId).HasValue && $dtoUserRegistration.RegAddress !=
null && ($dtoUserRegistration.RegAddress).Country != null
) {
(($dtoUserRegistration.RegAddress).Country).Region
} .Else {
($dtoUserRegistration.Nationality).Region
}).Name,
Id = (.If (
($dtoUserRegistration.RegAddressId).HasValue && (($dtoUserRegistration.RegAddress).CountryId).HasValue && $dtoUserRegistration.RegAddress !=
null && ($dtoUserRegistration.RegAddress).Country != null
) {
(($dtoUserRegistration.RegAddress).Country).Region
} .Else {
($dtoUserRegistration.Nationality).Region
}).Id
}
},
ОБНОВЛЕНИЕ: Это связано с ошибкой в EF Core.Я поднял проблему и обновлю вопрос, как только он будет исправлен.Если кто-то ищет обходной путь, это то, что я получил от команды EF Core.
Обходной путь (при отсутствии автоматического сопоставления) не будет использовать нулевую проверку при навигации.EF Core уже делает это для вас.Просто убедитесь, что приведете к типу nullable в конце.В EFCore, если вы напишите dtoUser.RegAddress.Country.Region.Id, он даст вам ноль, если какая-либо навигация будет нулевой, иначе даст вам значение связанного идентификатора.