2011-03-20 18 views
5

Tengo una base de datos existente. Por el momento estoy tratando de asignar mis nuevos objetos de Entidad a ese DB con el código de entidad de marco primero. A continuación se muestra la clase de usuario que tiene una colección de amigos. Como puede ver, esta es una relación de muchos a muchos con la misma tabla. ¿Cómo puedo mapear esta relación con la tabla "user_friend" que tiene las columnas "user_id" y "friend_id"?EF CF Configurar la asignación muchos-a-muchos manualmente

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

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

Respuesta

6

Necesitas bajar a API fluida para esto:

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

Gracias. Funcionó después de instalar EF RC. Una pregunta más. ¿Es posible asignar la colección Friends a un campo? Quiero exponer mi colección como IEnumerable o ICollection {get {return _friends.AsReadOnly();}} pero no es posible. – mynkow

+0

No hay problema. Con respecto a su pregunta, EF Code First actualmente no admite el mapeo de un campo, tiene que ser una propiedad. Si convierte su propiedad en solo lectura, Code First simplemente la ignorará. Por supuesto, puede tener una propiedad no automática definiendo el campo de respaldo, pero Code First siempre funcionará con la propiedad y no con el campo. –

+0

10x, que tengas un buen día :) – mynkow

Cuestiones relacionadas