2012-01-16 11 views
6

asp.netメンバーシップテーブルをasp.mvc 3のWebサイトに接続しようとしています。私はスポーツストアのSteve Sandersonの本「Pro ASP.NET MVC 3 Framework」のチュートリアルに従っており、これをメンバーシップexeから生成されたテーブルに適用しています。エンティティフレームワークでのテーブルの結合

だから私は、のように見えるユーザークラスがあります。

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

とのように見えるコンテキストクラス:

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

が、私はそれが間の参加を探していると仮定しているので、私はエラーを取得します実際にはこれらの2つのテーブルは、多くの場合、多くのリンクを避けるために、間にジョインテーブル(aspnet_UsersInRoles)があります。ユーザーからロールモデルを参照しようとすると、

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

{ "無効な列名 'User_UserId' \ R \ nInvalid列名 'User_UserId' \ R \ nInvalid列名 'User_UserId'。"}

マッピングする方法がありますエンティティフレームワークを使用して結合テーブルを使用してテーブルを一緒に?新しいADO.NETエンティティデータモデルを追加し、Visual Studioでデータベースをリバースエンジニアリングするだけの方が良いでしょうか?またRoleクラスにUsersプロパティを追加する必要があります。

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

編集を次のように

+0

に変更する必要があり、ここでEFを操作する方法をカバーしたブログ投稿の優れたセットが見つかりました:http://vincentlauzon.wordpress.com/2011/04/21/entity-framework-4-を1-bypassing-ef-query-mapping-8 /他の誰かが同様のニーズを持っている場合は、 – GrahamJRoy

答えて

17

は、あなたは多くのマッピングに多くをカスタマイズする必要があります。それ以外の場合はマッピングは

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

あなたは伝説です。これは大変ありがとうございます – GrahamJRoy

+0

こんにちは。また、Public仮想ICollectionを使用してUserをRoleクラスに追加しました。 Users {get;セット; }。あなたの助けをもう一度ありがとう – GrahamJRoy