2012-01-16 19 views
6

yılında Tabloları katılın. Steve Sanderson'ın spor mağazası için 'Pro ASP.NET MVC 3 Framework' adlı kitabındaki eğiticiyi takip ediyorum ve bunu üyelikten üretilen tablolara uygulıyorum.Haritalama Bir asp.mvc 3 web sitesine giriş asp.net üyelik tabloları bağlamak çalışıyorum İdare Framework

Yani görünen bir kullanıcı sınıfı var gibi:

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; } 
    } 
} 

ve şöyle bir bağlam sınıfında: Bunun bir arası katılmak arıyor varsayalım çünkü bir hata alıyorum

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"); 
    } 
} 

ama Bu iki tablo aslında çok sayıda bağlantıdan kaçınmak için arasında bir birleştirme tablosu (aspnet_UsersInRoles) olduğunda, Kullanıcıdan Rol modelini denediğimde ve başvuruda bulunduğumda:

{ "geçersiz sütun adı 'User_UserId'. \ R \ nYanlış sütun adı 'User_UserId'. \ R \ nYanlış sütun adı 'User_UserId.'"}

eşlemek için bir yol yoktur tablo, varlık çerçevesini kullanarak birleştirme tablosunu kullanarak birlikte mi? Yeni bir ADO.NET varlık veri modeli eklemek ve görsel stüdyonun veritabanını tersine çevirmesine izin vermek daha mı iyi? Ayrıca Role sınıfa Users özellik eklemek gerekir:

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"); 
      }); 
    } 

Edit şöyle

+0

bulunmuştur değiştirilmelidir: http://vincentlauzon.wordpress.com/2011/04/21/entity-framework-4- 1-by-by-ef-sorgu-haritalama-8/başkasının benzer ihtiyaçları varsa – GrahamJRoy

cevap

17

Birçok haritalama için birçok özelleştirmek gerekir. Aksi takdirde haritalama burada EF işlemek için nasıl kapak blog gönderisi mükemmel bir set

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

bir efsanesiniz. Bu – GrahamJRoy

+0

Merhaba için çok teşekkürler. evet aynı zamanda Kullanıcıyı genel sanal ICollection ile Rol sınıfına ekledi Kullanıcılar {get; set; }. Yardımın için tekrar teşekkürler – GrahamJRoy