[英]Mapping Join Tables In The Entity Framework
我正在嘗試將asp.net成員資格表連接到asp.mvc 3網站。 我一直在關注運動商店的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");
}
}
但我得到一個錯誤,因為我假設它正在尋找這兩個表之間的連接,實際上在它們之間有一個連接表( aspnet_UsersInRoles
)以避免多對多的鏈接,當我嘗試從用戶引用Role模型時,如:
var test = _repository.Users.FirstOrDefault().Roles.Count();
{“無效的列名'User_UserId'。\\ r \\ n無效的列名'User_UserId'。\\ r \\ n無效的列名'User_UserId'。”}
有沒有辦法使用實體框架使用連接表將表映射到一起? 添加新的ADO.NET實體數據模型並讓visual studio對數據庫進行逆向工程更好嗎?
您需要自定義多對多映射,如下所示
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");
});
}
編輯:您還需要將Users
屬性添加到Role
類。 否則映射應更改為
modelBuilder.Entity<User>()
.HasMany(u => u.Roles).WithMany()
.Map(m =>
{
m.ToTable("aspnet_UsersInRoles");
m.MapLeftKey("UserId");
m.MapRightKey("RoleId");
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.