2012-10-26 2 views
0

Supposons que vous vouliez créer une relation parent-enfant dans une table d'utilisateurs qui sera le type de zéro à un, nous souhaitons ajouter de la même manière le genre.Entity Framework Comportement différent de One-Zer-One

public class Gender 
{ 
    [Key] 
    public virtual int GenderID { get; set; } 

    public virtual string GenderName { get; set; } 

    public virtual ICollection<UserProfile> UserProfiles { get; set; } 
} 

et Userprofile

public class UserProfile 
{ 

    [Key] 
    public virtual int UserId { get; set; } 

    public virtual UserProfile UserParent { get; set; } 

    public virtual int? ParentUserId { get; set; } 

    public virtual String UserName { get; set; } 

    public virtual Gender Gender { get; set; } 

    public virtual int? GenderID { get; set; } 

    } 

pour plus de clarté

 modelBuilder.Entity<UserProfile>() 
      .HasOptional(c => c.UserParent); 

     // User -> Gender 
     modelBuilder.Entity<UserProfile>() 
      .HasOptional(g => g.Gender); 

enter image description here

Tout semble bon, mais pour le moment je ne peux pas récupérer les données obtenues à partir du parent UserName.

public IQueryable<UserProfileListViewModel> UserAllVM 
    { 
     get 
     { 
      var uservm = context.UserProfiles 
       .Select(l => new UserProfileListViewModel 
       { 
        UserId = l.UserId, 
        UserName = l.UserName, 
        ParentUserId = l.ParentUserId ?? 0, 
        //ParentUserName = this.context.UserProfiles.Where(e => e.UserId == l.ParentUserId).FirstOrDefault().UserName ?? "", 
        ParentUserName = l.UserParent.UserName, **// this way make always null** 
        GenderID = l.GenderID ?? 0, 
        GenderName = l.Gender.GenderName ?? "", 
       }); 

      return uservm; 
     } 
    } 

Commenté maintenant le chemin obtient le nom d'utilisateur parent. Question est pourquoi je ne peux pas récupérer Parent UserName - Je manque sth?

Tx aide

Répondre

2

Votre configuration du modèle est incomplet, see the answer to this question.

Vous pouvez utiliser l'attribut [ForeignKey] (MSDN) soit sur UserProfile.UserParent ou UserProfile.ParentUserId (même chose avec UserProfile.Gender/UserProfile.GenderId)

Ou vous pouvez définir la relation via l'API Courant:

modelBuilder.Entity<UserProfile>() 
    .HasOptional(u => u.UserParent) 
    .WithMany() 
    .AsForeignKey(u => u.ParentUserId) 

// User -> Gender 
modelBuilder.Entity<UserProfile>() 
    .HasOptional(u => u.Gender) 
    .WithMany(g => g.UserProfiles) 
    .AsForeignKey(u => u.GenderID); 
+0

Il pouvait renommez aussi ParentUserId en UserParentId - de cette façon il suit la convention EF et il associera automatiquement les propriétés –

+0

Fonctionne parfaitement TX! –