2011-10-25 6 views
0

Disons que j'ai 2 tables comme:relations Mapping FK dans EF codefirst

Table:User 
------------- 
- UserId [pk] 
- UserName 
- StatusId [fk] 

Table: Status 
------------- 
- StatusId [pk] 
- StatusDescription 

Maintenant, disons que je veux montrer l'StatusDescription dans mes poco comme:

public class User 
{ 
int UserId{get;set;} 
string UserName{get;set;} 
int StatusId{get;set;} 
string StatusDescription{get;set;} 
} 

Est-il possible de la carte ceci dans EF? Ou je peux seulement réaliser ceci avec:

public class User 
{ 
int UserId{get;set;} 
string UserName{get;set;} 
Status UserStatus{get;set;} 
} 

Des idées? Merci d'avance.

Répondre

1

Sans utiliser la base de données vue, vous pouvez atteindre la deuxième solution, mais vous pouvez l'améliorer avec des non cartographiées StatusDescription propriété:

public class User 
{ 
    public int UserId { get;set; } 
    public string UserName { get;set; } 
    public Status UserStatus { get; set; } 

    [NotMapped] 
    public string StatusDescription 
    { 
     get 
     { 
      return UserStatus.StatusDescription; 
     } 

     set 
     { 
      UserStatus.StatusDescription = value; 
     } 
    } 
} 
+0

merci pour la réponse, triste, il n'y a pas un moyen de mapper directement dans EF ... – AlegSilva

0

Vous pouvez créer une méthode d'extension pour générer un objet POCO avec des propriétés complexes.

public static class UserExtensions 
    { 
     public static UserPoco ToPoco(this User user) 
     { 
      UserPoco poco = new UserPoco(); 
      poco.UserId = user.UserID; 
      poco.UserName = user.UserName; 
      poco StatusDescription = user.Status.StatusDescription; 
      return poco; 
     } 
     public static UserPoco ToPoco(this User user,ExtraObjectToInclude object) 
     { 

      //....you can include other objects to construct something complex. 
     } 
    } 

Vous devez ajouter un lien de navigation à l'entité Statut dans l'entité Utilisateur. Vos objets Poco n'ont pas besoin d'être une correspondance exacte d'une entité. Ils peuvent également inclure plus d'informations provenant de plusieurs entités.

+0

merci pour la réponse, c'est quelque chose que je considérais, mais en utilisant quelque chose comme AutoMapper ... – AlegSilva

Questions connexes