代码优先的对象映射,无法获取 table 属性
Object mapping in code-first, cannot get table property
我正在学习代码优先,并且正在尝试为我的项目创建数据库模型。为了让我的问题简单化,我将在我的模型中使用两个表——用户和角色
我现在的主要问题是我无法通过使用 属性 获得 role。例如我的代码:
var role = dbContext.Users.FirstOrDefault(n => n.UserId== id).Role;
return 空。我认为这是模型映射的问题。我的用户 class 看起来像:
public class User
{
public User()
{
Role = new Role();
}
public int UserId { get; set; }
[Required]
public string Login { get; set; }
[Required]
public string Name { get; set; }
[Required]
public string Password { get; set; }
public DateTime CreationDate { get; set; }
public DateTime LastLoginDate { get; set; }
[ForeignKey("Role")]
public int RoleId { get; set; }
public Role Role { get; set; }
public virtual ICollection<Telephone> Telephones { get; set; }
}
我的角色class:
public class Role
{
public Role()
{
Users = new List<User>();
}
public int RoleId { get; set; }
public string RoleName { get; set; }
public string RoleDescription { get; set; }
public ICollection<User> Users { get; set; }
}
和数据库上下文与这两个 classes :
public CallCenterContext() : base(@"CONNECTIONSTRING")
{
}
public DbSet<User> Users { get; set; }
public DbSet<Role> Roles { get; set; }
你能帮我做一下模型映射吗?
谢谢大家的回答!
您应该在查询中包含角色,如下所示:
var role = dbContext.Users
.Include("Role") // <----- add this
.FirstOrDefault(n => n.UserId== id).Role;
您也可以使用 .Include(u => u.Role)
而不是 .Include("Role")
,后者更好,但不适用于 MySql 数据库和某些特定控制器。
您还应该在用户 class 中将角色 属性 声明为虚拟:
public virtual Role Role { get; set; }
我正在学习代码优先,并且正在尝试为我的项目创建数据库模型。为了让我的问题简单化,我将在我的模型中使用两个表——用户和角色
我现在的主要问题是我无法通过使用 属性 获得 role。例如我的代码:
var role = dbContext.Users.FirstOrDefault(n => n.UserId== id).Role;
return 空。我认为这是模型映射的问题。我的用户 class 看起来像:
public class User
{
public User()
{
Role = new Role();
}
public int UserId { get; set; }
[Required]
public string Login { get; set; }
[Required]
public string Name { get; set; }
[Required]
public string Password { get; set; }
public DateTime CreationDate { get; set; }
public DateTime LastLoginDate { get; set; }
[ForeignKey("Role")]
public int RoleId { get; set; }
public Role Role { get; set; }
public virtual ICollection<Telephone> Telephones { get; set; }
}
我的角色class:
public class Role
{
public Role()
{
Users = new List<User>();
}
public int RoleId { get; set; }
public string RoleName { get; set; }
public string RoleDescription { get; set; }
public ICollection<User> Users { get; set; }
}
和数据库上下文与这两个 classes :
public CallCenterContext() : base(@"CONNECTIONSTRING")
{
}
public DbSet<User> Users { get; set; }
public DbSet<Role> Roles { get; set; }
你能帮我做一下模型映射吗? 谢谢大家的回答!
您应该在查询中包含角色,如下所示:
var role = dbContext.Users
.Include("Role") // <----- add this
.FirstOrDefault(n => n.UserId== id).Role;
您也可以使用 .Include(u => u.Role)
而不是 .Include("Role")
,后者更好,但不适用于 MySql 数据库和某些特定控制器。
您还应该在用户 class 中将角色 属性 声明为虚拟:
public virtual Role Role { get; set; }