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