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

C# 从域模型转换为视图模型时出现空引用问题,c#,model,viewmodel,asp.net-mvc-viewmodel,domain-model,C#,Model,Viewmodel,Asp.net Mvc Viewmodel,Domain Model,当存储过程中没有要返回的数据时,下面的代码抛出null引用异常。如果数据存在,方法将成功执行 下面的代码有什么问题吗?是否需要从模型创建对象 public PersonVM GetStaff() { PersonDM personDM = _Repo.GetStaff(); PersonVM personVM = PersonVM.ToViewModel(personDM); return personVM; } public class PersonDM {

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

下面的代码有什么问题吗?是否需要从模型创建对象

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值填充它,而不返回null。有可能实现吗

我用一个方法做了同样的事情,这个方法返回一个包含以下代码的列表。如果没有数据存在,它会用空值填充VM。如何将下面的代码应用于返回PersonVM类型的方法

假设_Repo.GetStaff返回null,因此personDM为null,那么当您试图在null引用上访问ToViewModel中的对象属性时,抛出NullReferenceException就不足为奇了

在GetStaff或ToViewModel中添加空检查,并进行适当的处理。根据您的更新,您表示希望返回具有null属性的viewmodel,这可以通过null检查完成:

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

    return new PersonVM
    {
        RoleID = model.RoleID,
        Name = model.Name
    };
}
更新-或者,将ToViewModel方法更改为使用null progagating运算符:

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

在哪里抛出NullReferenceException?PersonDM PersonDM=\u Repo.GetStaff;真的返回一个人吗?@ChrisPickford我已经修改了这个问题。请喝一杯look@StephenWilson我已经修改了这个问题。请看一看,谢谢。但是如果模型为空,我不想返回NULL值。我只想用空值填充模型。我已经修改了这个问题。请看一看。更新后的答案,使用null传播运算符-或将null检查移动到ToViewModel。您的意思是->公共int?RoleID{get;set;}因为->RoleID=model?.PartyRoleID,返回语法错误是的,如果希望属性值类型为null,则需要将它们更改为null。
public static PersonVM ToViewModel(PersonDM model)
{
    return new PersonVM
    {
        RoleID = model?.RoleID,
        Name = model?.Name
    };
}