2012-01-16 15 views
6

Estoy intentando conectar las tablas de miembros asp.net en la página web a un 3 asp.mvc. He estado siguiendo el tutorial en el libro de Steve Sanderson 'Pro ASP.NET MVC 3 Framework' para la tienda de deportes y aplicando esto a las tablas que se generan desde el miembro de exe.Mapeo de Ingreso mesas en el marco de la entidad

Así que tienen una clase de usuario que se parece a:

namespace Domain.Entities 
{ 
    public class User 
    { 
     public Guid UserId { get; set; } 
     public string UserName { get; set; } 
     public DateTime LastActivityDate; 
     public virtual ICollection<Role> Roles { get; set; } 
    } 

    public class Role 
    { 
     public Guid RoleId { get; set; } 
     public string RoleName { get; set; } 
    } 
} 

y una clase de contexto que se parece a:

public class EFDbContext : DbContext 
{ 
    public DbSet<User> Users { get; set; } 
    public DbSet<Role> Roles { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<User>().ToTable("aspnet_users"); 
     modelBuilder.Entity<Role>().ToTable("aspnet_roles"); 
    } 
} 

pero me da un error porque supongo que está buscando una combinación entre estas dos tablas cuando de hecho hay una tabla de combinación (aspnet_UsersInRoles) entre medio para evitar un enlace de muchos a muchos, cuando intento y hago referencia al modelo de rol del usuario, como:

var test = _repository.Users.FirstOrDefault().Roles.Count(); 

{ "Nombre no válido columna 'User_UserId'. \ R \ nInvalid nombre de la columna 'User_UserId'. \ R \ nInvalid nombre de la columna 'User_UserId'."}

hay una manera para mapear la tabla juntos usando la tabla de unión usando el marco de entidad? ¿Es mejor simplemente agregar un nuevo modelo de datos de entidad ADO.NET y dejar que visual studio modifique la base de datos?

+0

encontró un excelente conjunto de entradas de blog que cubre la forma de manipular EF aquí: http://vincentlauzon.wordpress.com/2011/04/21/entity-framework-4- 1-bypass-ef-query-mapping-8/en caso de que alguien más tenga necesidades similares – GrahamJRoy

Respuesta

17

necesarias para personalizar los muchos a muchos mapeo de la siguiente manera

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<User>().ToTable("aspnet_users"); 
     modelBuilder.Entity<Role>().ToTable("aspnet_roles"); 

     modelBuilder.Entity<User>() 
     .HasMany(u => u.Roles).WithMany(r => r.Users) 
      .Map(m => 
      { 
       m.ToTable("aspnet_UsersInRoles"); 
       m.MapLeftKey("UserId"); 
       m.MapRightKey("RoleId"); 
      }); 
    } 

Editar: También habría que añadir Users propiedad a la clase Role. De lo contrario, la asignación se debe cambiar a

 modelBuilder.Entity<User>() 
     .HasMany(u => u.Roles).WithMany() 
      .Map(m => 
      { 
       m.ToTable("aspnet_UsersInRoles"); 
       m.MapLeftKey("UserId"); 
       m.MapRightKey("RoleId"); 
      }); 
+0

eres una leyenda. muchas gracias por esto – GrahamJRoy

+0

Hola. sí también se agregó la clase Usuario a la función con ICollection virtual público Usuarios {get; conjunto; }. De nuevo, gracias por tu ayuda – GrahamJRoy

Cuestiones relacionadas