2015-12-22 47 views
1

我學習代碼優先,並試圖爲我的項目創建數據庫模型。爲了使我的問題簡單,我會在我的模型的兩個表使用 - 用戶和角色代碼優先的對象映射,無法獲取表格屬性

Database diagram in SQL Server

我的主要問題現在的問題是,我不能使用財產得到作用。例如我的代碼:

var role = dbContext.Users.FirstOrDefault(n => n.UserId== id).Role; 

返回null。我認爲這是模型映射的問題。我的用戶類的樣子:

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; } 
    } 

我的角色類:

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; } 
    } 

和DB背景下與這兩個類:

public CallCenterContext() : base(@"CONNECTIONSTRING") 
    { 

    } 

    public DbSet<User> Users { get; set; } 
    public DbSet<Role> Roles { get; set; } 

你能懇求幫助我的模型映射? 謝謝大家的回答!

回答

1

你應該在你的查詢中的作用,就像這樣:

var role = dbContext.Users 
     .Include("Role") // <----- add this 
     .FirstOrDefault(n => n.UserId== id).Role; 

您還可以使用.Include(u => u.Role)代替.Include("Role")這是更好的,但不與MySQL數據庫和一些特定的控制器工作。

你也應該在用戶類中聲明的角色屬性作爲虛擬:

public virtual Role Role { get; set; } 
+0

這個代碼仍然在我的項目 返回空的角色,我不能添加: .INCLUDE(U => u.Role) – mersey

+0

是的,我檢查了它 我的代碼現在︰ var role = dbContext.Users.Include(「Role」)。First(n => n.UserId == currentUser.UserId).Role; – mersey

+0

我需要在我的Role屬性中創建一個虛擬對象,並且在我的User類構造函數中創建了一個新角色,所以每次我只爲我的用戶創建一個新角色。感謝您的幫助 – mersey

相關問題