簡體   English   中英

在實體框架中映射連接表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM