2012-03-09 10 views
7

Tengo un usuario de entidad. Se supone que cada Usuario tiene muchos Amigos y Maestros. Con EF Code First, estoy un poco confundido sobre cómo lograr lo que quiero. Vi ejemplos de auto referencia, pero no de muchos a muchos. Por ejemplo:Autorreferencia de muchos a muchos de Entity Framework

public class Employee 
{ 
    #region Properties 

    public int EmployeeID { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 

    public int? ManagerID { get; set; } 
    public Employee Manager { get; set; } 

    #endregion 
} 

y la modelBuilder:

modelBuilder.Entity<Employee>(). 
     HasOptional(e => e.Manager). 
     WithMany(). 
     HasForeignKey(m => m.ManagerID); 

Cómo crear una entidad con autorreferencia en mi caso, donde hay Amigos (si a es amigo con b, esto significa que b es amigo con a) y Profesores (si a es profesor de b, b es alumno de a)?

Disculpe si ya existe un hilo similar. Cualquier ayuda es muy apreciada.

+0

¿Qué tal este? http://blogs.msdn.com/b/wriju/archive/2011/05/14/code-first-ef-4-1-building-many-to-many-relationship.aspx –

+0

El ejemplo muestra solo muchos- para muchos, sin autorreferencia, que es bastante fácil y ni siquiera requiere un modelBuilder. De todos modos, gracias por tu ayuda. – Unknown

Respuesta

10

Ok, porque muchas personas respondieron esto;), busqué un poco más y encontré la solución para mi caso. La entidad se ve así:

public class User 
{ 
    public int ID { get; set; } 
    public string UserName { get; set; } 

    public virtual ICollection<User> Friends { get; set; } 
} 

la modelBuilder:

modelBuilder.Entity<User>() 
       .HasMany(x => x.Friends) 
       .WithMany(); 

Y finalmente hice métodos auxiliares Hacerse amigo y BecomeTeacherStudent, que asegúrese de que cuando se convierte en amigo de alguien que se hace amigo con usted (y el lo respectivo para el maestro-alumno).

+0

Esto probablemente le proporcione algunos nombres extraños de tablas y claves, consulte http://msdn.microsoft.com/en-us/data/jj591620.aspx para obtener detalles sobre cómo abordar eso. – bbodenmiller

+0

¿Hay alguna forma de configurar esto con 'DataAnnotations'? – Shimmy

Cuestiones relacionadas