6

Tengo dos clases, la clase Grupo tiene una relación muchos a muchos con la clase User (representa los grupos a los que pertenece un usuario) y luego el grupo también tiene una relación de uno a muchos con el usuario clase (que representa al propietario de un grupo).Código del Entity Framework Primer Asignación

¿Cómo puedo hacer un mapa de esto?

public class User 
{ 
    public int Id { get; set; } 
    public string Avatar { get; set; } 
    public string Name { get; set; } 
    public string Message { get; set; } 

    public virtual ICollection<Group> OwnedGroups { get; set; } 
    public virtual ICollection<Group> Groups { get; set; } 
} 

public class Group 
{ 
    public int Id { get; set; } 
    public DateTime CreateDate { get; set; } 
    public DateTime ModifyDate { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public bool System { get; set; } 
    public int ViewPolicy { get; set; } 
    public int JoinPolicy { get; set; } 
    public string Avatar { get; set; } 
    public int Order { get; set; } 
    public int GroupType { get; set; } 

    public virtual User Owner { get; set; } 
    public virtual ICollection<User> Members { get; set; } 
} 

tks de adelanto!

Respuesta

5

me gustaría utilizar la API de fluidez:

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

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 

     modelBuilder.Entity<User>() 
        .HasMany(u => u.Groups) 
        .WithMany(g => g.Members); 

     modelBuilder.Entity<User>() 
        .HasMany(u => u.OwnedGroups) 
        .WithRequired(g => g.Owner) 
        .WillCascadeOnDelete(false); 
    } 
} 

También debe ser posible con anotaciones de datos:

public class User 
{ 
    ... 

    [InverseProperty("Owner")] 
    public virtual ICollection<Group> OwnedGroups { get; set; } 
    [InverseProperty("Members")] 
    public virtual ICollection<Group> Groups { get; set; } 
} 

public class Group 
{ 
    ... 

    [InverseProperty("OwnedGroups")] 
    public virtual User Owner { get; set; } 
    [InverseProperty("Groups")] 
    public virtual ICollection<User> Members { get; set; } 
} 

InverseProperty no es necesaria en ambos lados de relación pero sí definición más clara.

+1

EXCELENTE !!! tks – boossss

+0

@Ladislav Mrnka puede explicar WillCascadeOnDelete y WithRequired. Plz. gracias !! –

Cuestiones relacionadas