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