2011-03-20 3 views
5

J'ai une base de données existante. Pour le moment, j'essaie de mapper mes nouveaux objets Entity à cette base de données avec le code de structure d'entité en premier. Voici la classe User qui a une collection d'amis. Comme vous pouvez le voir, il s'agit d'une relation plusieurs-à-plusieurs avec la même table. Comment puis-je mapper cette relation à la table "user_friend" qui a des colonnes "user_id" et "friend_id".EF CF Configurer le mappage plusieurs-à-plusieurs manuellement

public class User 
{ 
    private ICollection<User> _friends = new List<User>(); 
    public ICollection<User> Friends { get{return _firends;} } 
} 

moduleBuilder.Entity<User>().HasMany????.ToTable("user_friend"); 

Répondre

6

Vous devez descendre à l'API couramment pour cela:

public class User 
{ 
    public int UserId { get; set; } 
    public ICollection<User> Friends { get; set; } 
} 

public class Context : DbContext 
{ 
    public DbSet<User> Users { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<User>().HasMany(u => u.Friends).WithMany().Map(c => 
     { 
      c.MapLeftKey(u=>u.UserID, "user_id"); 
      c.MapRightKey(f=>f.FriendID, "friend_id"); 
      c.ToTable("user_friend"); 
     }); 
    } 
} 
+0

Merci. Cela a fonctionné après l'installation de EF RC. Encore une question. Est-il possible de mapper la collection Friends à un champ. Je veux exposer ma collection comme IEnumerable ou ICollection {get {return _friends.AsReadOnly();}} mais ce n'est pas possible. – mynkow

+0

Pas de problème. En ce qui concerne votre question, EF Code First ne prend actuellement pas en charge le mappage à un champ, il doit s'agir d'une propriété. Si vous définissez votre propriété en lecture seule, Code First l'ignorera simplement. Bien sûr, vous pouvez avoir une propriété non automatique en définissant le champ de sauvegarde, mais le code Premier fonctionnera toujours avec la propriété et non le champ. –

+0

10x, passez une bonne journée :) – mynkow

Questions connexes