Automapper EF Core为导航属性抛出“值不能为空。参数名称:querySource”

时间:2018-10-12 10:43:42

标签: c# automapper ef-core-2.0

映射导航属性时,我从Automapper中收到Value cannot be null. Parameter name: querySource错误。

.ForMember(p => p.Region, opt => opt.MapFrom(p => 
  (p.RegAddressId.HasValue && p.RegAddress.CountryId.HasValue)? 
  p.RegAddress.Country.Region: p.Nationality.Region)) 

RegAddressId可为空,NationalityId不可为空。

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中的错误所致。我提出了一个issue,并将在问题解决后对其进行更新。如果有人在寻找解决方法,这就是我从EF Core团队得到的。

  

解决方法(在没有自动映射器的情况下)将不使用null   检查导航。 EF Core已经为您做到了。只要确保   最后强制转换为可空类型。在EFCore中,如果您编写   dtoUser.RegAddress.Country.Region.Id,如果有的话,它将为您提供null   navigation为null,否则为您提供关联ID的值。

0 个答案:

没有答案