0

再会,

我的程序给我带来了很多麻烦。突然给我一个错误:

列名“UserProfile_UserId”无效。

对于此代码:

public ActionResult Index()
{
---> var model = _db.Roles.ToList();    
return View(model);

这是有道理的。但问题是我什至没有使用用户配置文件类。我使用角色类。

这是我的控制器:

 FSKDb _db = new FSKDb();
    //
    // GET: /Roles/

    public ActionResult Index()
    {
        var model = _db.Roles.ToList();

        return View(model);
    }

这是我的数据库类:

namespace Attempt3.Models
{
public class FSKDb : DbContext
{
    public FSKDb() : base("name=DefaultConnection")
    {
    }

    public DbSet<UserProfile> UserProfiles { get; set; }
    public DbSet<Roles> Roles { get; set; }   
}
}

角色类:

[Table("webpages_Roles")]
public class Roles
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int RoleId { get; set; }
    public string RoleName { get; set; }
    public string Description { get; set; }
}

用户配置文件类

   [Table("UserProfile")]
public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string UserName { get; set; }
    public string Surname { get; set; }
    public string ClientCode { get; set; }
    public ICollection<Roles> UserRoles { get; set; }
}

我不知道为什么当我尝试在我的控制器中查找 EF 试图查找 User Profiles_UserID 的角色时

如果我正在寻找用户而不是角色,它应该只寻找那个。即便如此,UserProfile UserId 列名只是“UserId”而不是“UserProfile_UserId”

谢谢

4

1 回答 1

0

UserProfile你在和之间有一对多的关系Roles。因此,每个角色都与一个用户相关联,因此 UserProfile_ID 存储在角色表中。要建立多对多关系,您必须执行以下操作:

  1. 在课堂上指定UserProfile它有很多Roles- 由你完成
  2. 在类Role中指定它有许多 UserProfile:

    [Table("webpages_Roles")]
    public class Roles
    {
        [Key]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int RoleId { get; set; }
        public string RoleName { get; set; }
        public string Description { get; set; }
        public ICollection<UserProfile> Users { get; set; }
    }
    

是的,仅此而已。现在 EF 将生成第三个名为的表,并将在and 、and之间UserProfileRoles建立隐藏的一对多关系。如果要更改表名,在您的上下文类中,您必须覆盖并使用 fluent api 配置类到表的映射:UserProfileUserProfileRolesRoleUserProfileRolesOnModelCreating

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder
        .Entity<UserProfile>()
        .HasMany<Roles>(u => u.UserRoles)
        .WithMany(u => u.Users)
        .Map(m => {
            m.ToTable("_myOwnMapTable_UserProfile__Roles");
        });

    base.OnModelCreating(modelBuilder);
}

链接:

  1. 开始使用实体框架 (EF)
  2. 使用 Fluent API 配置/映射属性和类型
  3. 使用 Fluent API 配置关系
于 2013-07-04T13:08:53.493 回答