从域模型转换为视图模型时出现空引用问题

Null reference issue occurs when converting from Domain model to View model

当没有数据从存储过程返回时,下面的代码抛出空引用异常。如果存在数据,方法将成功执行。

下面的代码我做错了吗?我需要从模型创建对象吗?

public PersonVM GetStaff()
{
    PersonDM personDM = _Repo.GetStaff();
    PersonVM personVM = PersonVM.ToViewModel(personDM);
    return personVM;
}

public class PersonDM
{
    public int RoleID { get; set; }
    public string Name { get; set; }
}

public class PersonVM
{
    public int RoleID { get; set; }
    public string Name { get; set; }

    public static PersonVM ToViewModel(PersonDM model)
    {
        return new PersonVM
        {
            RoleID = model.RoleID,
            Name = model.Name
        };
    }

    public PersonDM ToEntityModel()
    {
        return new PersonDM
        {
            RoleID=this.=RoleID,
            Name = this.Name,
        }
    }
}

当没有数据从SP返回时personDM变为NULL。我需要它用空值填充而不返回 NULL。有可能实现吗?

我用下面的代码返回 List<PersonVM> 的方法做了同样的事情。如果不存在数据,它会用 NULL 值填充 VM。如何将以下代码应用于返回类型 PersonVM

的方法
public List<PersonVM> GetPartyByPartyRelationship(int partyRoleId, int partyRelationshipTypeId)
    {
        List<PersonDM> personDMList = _partyManagerRepo.GetPartyByPartyRelationship(partyRoleId, partyRelationshipTypeId);
        List<PersonVM> personVMList = new List<PersonVM>();
        foreach (PersonDM personDM in personDMList)
        {
            personVMList.Add(PersonVM.ToViewModel(personDM));
        }

        return personVMList;
    }

假设 _Repo.GetStaff() 是 returning null,因此 personDM 是 null,当你尝试访问 ToViewModel() 内的对象属性,引用为空。

GetStaff()ToViewModel() 中添加空检查并适当处理。根据您的更新,您说您想要 return 具有空属性的视图模型,您可以使用空检查来完成:

public static PersonVM ToViewModel(PersonDM model)
{
    if (model == null)
        return new PersonVM();

    return new PersonVM
    {
        RoleID = model.RoleID,
        Name = model.Name
    };
}

Update - 或者,更改您的 ToViewModel() 方法以利用 null-progagating 运算符:

public static PersonVM ToViewModel(PersonDM model)
{
    return new PersonVM
    {
        RoleID = model?.RoleID,
        Name = model?.Name
    };
}