C# 从域模型转换为视图模型时出现空引用问题
当存储过程中没有要返回的数据时,下面的代码抛出null引用异常。如果数据存在,方法将成功执行 下面的代码有什么问题吗?是否需要从模型创建对象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 {
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
};
}