2017-07-18 5 views
0

Le code ci-dessous renvoie une exception de référence null lorsqu'il n'y a aucune donnée à renvoyer de la procédure stockée. La méthode s'exécute avec succès si des données sont présentes.Un problème de référence nulle se produit lors de la conversion du modèle de domaine en modèle de vue

Est-ce que je fais quelque chose de mal avec le code ci-dessous? Ai-je besoin de créer un objet à partir du modèle?

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, 
     } 
    } 
} 

Quand il n'y a pas de données à retour de la SP personDM devient NULL. Je ai besoin d'être rempli avec des valeurs nulles sans retourner NULL. Est-il possible de réaliser?

Image

J'ai fait la même chose avec une méthode qui renvoie une List<PersonVM> avec le code ci-dessous. Il remplit la VM avec des valeurs NULL s'il n'y a pas de données présentes. Comment appliquer le code ci-dessous pour une méthode qui retourne le type 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

Où est levée l'exception NullReferenceException? –

+0

Est-ce que 'PersonDM personDM = _Repo.GetStaff();' retourne réellement un PersonDM? –

+0

@ChrisPickford J'ai modifié la question. S'il vous plaît jeter un oeil –

Répondre

1

En supposant que _Repo.GetStaff() est il ne devrait pas renvoyer la valeur null et donc personDM est nulle, être une surprise qu'un NullReferenceException est être jeté comme vous êtes essayer d'accéder aux propriétés d'objet dans ToViewModel() sur une référence null.

Ajoutez une vérification null, soit dans GetStaff() ou ToViewModel() et gérer de manière appropriée. Sur la base de votre mise à jour, vous dites que vous voulez retourner un viewmodel avec des propriétés null, que vous pouvez faire avec le chèque nul:

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

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

Mise à jour - Ou, changez de méthode ToViewModel() d'utiliser l'opérateur null-plants appartenant :

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

Merci. Mais je ne veux pas retourner la valeur NULL si le modèle est vide. Je veux juste remplir le modèle avec des valeurs NULL. J'ai modifié la question. Jetez un coup d'oeil s'il vous plait. –

+0

Réponses mises à jour, utilisez l'opérateur de propagation null - ou déplacez la vérification null vers 'ToViewModel()'. –

+0

Voulez-vous dire ceci -> public int? RoleID {get; ensemble; } Parce que -> RoleID = model? .PartyRoleID, renvoie une erreur de syntaxe –