2017-07-18 5 views
0

ストアドプロシージャから返されるデータがない場合、以下のコードは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を返さずにヌル値で埋める必要があります。達成することは可能ですか?

Image

私は以下のコードでList<PersonVM>を返している方法と同じことをしました。データが存在しない場合は、VMにNULL値が設定されます。 _Repo.GetStaff()がnullを返すされているのでpersonDMがnullであると仮定すると、タイプ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; 
    } 
+1

NullReferenceExceptionはどこにスローされますか? –

+0

'PersonDM personDM = _Repo.GetStaff();'は実際にPersonDMを返しますか? –

+0

@ChrisPickford私は質問を修正しました。どうぞご覧ください –

答えて

1

を返すメソッドに以下のコードを適用することができますどのように、あなたがしているようNullReferenceExceptionがスローされていることを驚くべきことではありませんnull参照でToViewModel()のオブジェクトプロパティにアクセスしようとしています。

ヌルチェックを追加すると、GetStaff()またはToViewModel()のいずれかが適切に処理されます。あるいは、ヌル・progagating演算子を利用するためにあなたのToViewModel()方法を変更 - 更新

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

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

:あなたの更新に基づいて、あなたはあなたがnullのチェックを行うことができ、ヌルのプロパティでのviewmodelを返すようにしたいと言います:

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

ありがとうございます。しかし、モデルが空の場合、NULL値を返すことは望ましくありません。私はちょうどNULL値でモデルを埋めるしたいです。私はその質問を修正した。見てください。 –

+0

回答が更新されました。ヌル伝播演算子を使用するか、ヌルチェックをToViewModel()に移動します。 –

+0

これは - > public intですか? RoleID {get;セット; } - > RoleID = model?.PartyRoleIDなので、構文エラー –

関連する問題