2016-07-19 83 views
1

我有兩個型號。 ApplicationUser實體框架的關係破裂

public class ApplicationUser : IdentityUser 
{ 
    public string FirstName { get; set; } 

    public DateTime AccountCreationDate { get; set; } 

    public virtual ICollection<ProfileView> ProfilesViewed { get; set; } 
} 

而且ProfileView

public class ProfileView 
{ 
    public int Id { get; set; } 

    public DateTime ViewDate { get; set; } 

    public virtual ApplicationUser Viewer { get; set; } 

    public virtual ApplicationUser Viewee { get; set; } 

} 

實體框架似乎正確創建我的表。我可以做以下和檢索用戶的ProfileViews

db.ProfileViews.Where(p => p.Viewer.Id == currentUser.Id); 

我的問題是,我似乎無法做到以下幾點:

db.Users 
    .Where(u => u.Id == currentUser.Id) 
    .Include(u => u.ProfilesViewed); 

該用戶以上的回報null,即使它是Viewer和幾個ProfileView一個Viewee

我跑我的所有用戶foreach,他們都不具有任何ProfilesViewed如果我查詢他們從UsersInclude。我只能從ProfileViews表中檢索ProfileViews ...

任何人都有任何想法如何解決這個問題?

+0

更重要的是,ApplicationUser的PK是什麼?這種關係的映射是什麼? – DevilSuichiro

回答

1

既然你沒有提到的ProfileView.Viewer是如何與ApplicationUser.ProfileViewed EF認爲他們是不相關的(如果你檢查你的數據庫,你可以看到另一個FK在ProfileView創造了ApplicationUser.ProfileViewed集合)。因此,將實例添加到ProfileView不會影響User.ProfilesViewed

這個代碼添加到Context類,指定每個ApplicationUser通過ProfilesViewed收集有關許多ProfileView

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<ProfileView>().HasRequired(x => x.Viewer) 
       .WithMany(x => x.ProfilesViewed); 
} 
+0

你搖滾,它的工作!每當我創建具有虛擬屬性的模型時,EF都會自動理解這種關係。我想這對於做出假設有點太不尋常了。 – aBertrand

0

的關係可能需要進行解釋,以正確創建。我認爲這是錯誤的,因爲您有兩個從ProfileView到ApplicationUser的關係。請參閱如何配置使用EF代碼第一次非常規的關係細節this MSDN article「組態非常規的外鍵名稱」。