2017-06-29 40 views
0

不確定如何描述此問題。實體框架權限加入以填充用戶設置

這裏是例子:

我有一個實體作爲Tour。遊覽表包含靜態3行(未來可能更多)。

 public class Tour 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Location { get; set; } 
} 

每個用戶都可以打開這個選項鍵。

所以我有另一個名爲UserTourSetting的表來存儲用戶選項。

 public class UserTourSetting 
{ 

    public int Id { get; set; } 
    public int UserId { get; set; } 
    public int TourId { get; set; } 
    public bool Enabled { get; set; } 
    public ApplicationUser User { get; set; } 
    public Tour Tour { get; set; } 
} 

當用戶加載頁面應該經常看到3行與開啓或關閉狀態。

enter image description here

當我加載UserTourSetting表我沒有得到任何結果,因爲沒有記錄又在桌子上的用戶第一次。我想我需要加入Tour table,並且還包括Tour結果,因爲我需要冠軍。

當開關關閉時,單獨添加新記錄(如果不存在)或更改啓用密鑰(如果存在)。

用EF實現這個最好的方法是什麼?我努力生成linq語句來加載連接表。

這裏是我試過的方法:

public IEnumerable<UserTourSetting> GetUserTourSettings(int userId) 
    { 
     var q = from tour in DbContext.Tours 
       join uts in DbContext.UserTourSettings 
       on tour.Id equals uts.TourId 
       where uts.UserId == userId 
       select uts; 
     return q; 

    } 

但它不工作。我無法訪問巡迴賽名稱。包含哪裏可以進入此查詢?

謝謝,

+0

你是什麼意思_it不WORK_?方法不會返回值,或者您無法訪問Tour.Name。對我來說它應該工作:'var firstUserTourSettingsName = GetUserTourSettings(1).First()。Tour.Name' –

+0

SELECT [Extent1]。[Id] AS [Id], [Extent1]。[UserId] AS [UserId] , [Extent1] [TourId] AS [TourId], [Extent1]。[有效] AS [有效] FROM [DBO]。[UserTourSettings] AS [Extent1] WHERE [Extent1]。[用戶Id] = @ p__linq__0這是生成的腳本 – akd

+0

生成的腳本是一回事,但您需要的數據是不同的。你甚至嘗試從'UserTourSetting.Tour.Name'獲取名字嗎? –

回答

1

請嘗試設置這些屬性的虛擬。

public virtual ApplicationUser User { get; set; } 
public virtual Tour Tour { get; set; } 

P/S:瞭解更多信息,你可以看到這個https://stackoverflow.com/a/8542879/5771430