2015-05-02 38 views
0

一個關係,我有我的實體設置:一零/與EF6,MySQL和MVC錯誤

public class User 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid UserId { get; set; } 

    public string UserName { get; set; } 
    public string Password { get; set; } 

    public virtual Permissions Permissions { get; set; } 
    ... 
} 
public class Permissions 
{ 
    [Key, ForeignKey("User")] 
    public Guid UserId { get; set; } 

    public virtual User User { get; set; } 

    public bool UserType1 { get; set; } 
    public bool UserType2 { get; set; } 
    ... 
} 

的目的是有分離到另一個表的權限,一個非常簡單的設置。在種子數據庫時,我創建了一些權限設置正確的用戶(使用外部編輯器檢查這些表具有與用戶/權限條目匹配的鍵)。設置代碼是:

public class EfDbInitializer : DropCreateDatabaseAlways<EfDbContext> 
{ 
    protected override void Seed(EfDbContext context) 
    { 

     // Add admin user 

     User admin = new User 
     { 
      UserName = "Admin", 
      Password = "pass", 
      FirstName = "Administrator", 
      LastName = "Web", 
      Permissions = new Permissions().SetAdminPermissions() 
     }; 
     context.Users.Add(admin); 

     context.Users.Add(new User { UserName = "User1", Password = "pass", FirstName = "John", LastName = "Doe", CreatedBy = admin, Permissions = new Permissions().AddFullPermissions().AddInstructorPermissions() }); 
     context.Users.Add(new User { UserName = "User2", Password = "pass", FirstName = "Jenny", LastName = "Doh", CreatedBy = admin, Permissions = new Permissions().AddFullPermissions().AddBasicPermissions() }); 
     context.Users.Add(new User { UserName = "User3", Password = "pass", FirstName = "Sasha", LastName = "Grey", CreatedBy = admin, Permissions = new Permissions().AddBasicPermissions() }); 
     context.Users.Add(new User { UserName = "User4", Password = "pass", FirstName = "Arnold", LastName = "Schwarzenegger", CreatedBy = admin, Permissions = new Permissions().AddInstructorPermissions() });   
     base.Seed(context); 
    } 
} 

但是,當試圖訪問相應的實體時,我總是收到異常。例如,直接在控制器I具有

if (filter == "Type1") 
        return View(_repository.Users.Where(p => p.Permissions.UserType1)); 

運行相應的動作給出了例外

System.Data.Entity.Core.EntityCommandExecutionException was unhandled by user code 

我試圖禁用懶惰評價在DB配置(Configuration.LazyLoadingEnabled =假) 。然後,該例外更改爲:

An exception of type 'System.NullReferenceException' occurred in Web.WebUI.dll but was not handled in user code 

檢查在lambda我看到字段設置成功(用戶名,密碼等)的「P」的對象,但權限字段爲空。

我使用MySql.Data 6.9.6; MySql.Data.Entity 6.9.6; 6.1.3的EntityFramework

回答

0

嘗試_repository.Users.Include(U => u.Permissions)。凡(P => p.Permissions.UserType1)

https://msdn.microsoft.com/en-us/data/jj574232.aspx

+1

謝謝!這有很大幫助。對於閱讀此內容的任何人 - 我還必須將IEnumerable 更改爲EfUserRepository類中的IQueryable ;懶惰的評估也必須被禁用。 – architec