2017-05-08 66 views
0

我有三個車型,如以下,實體框架連接三個表,使用該集團的毗連

public class Team 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
    } 
    public class Document 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public string Type { get; set; } 
     public string Application { get; set; } 
     public ICollection<DocumentResponsible> DocumentResponsibles { get; set; } 
     public string Pcda { get; set; } 
     public DateTime CreatedAt { get; set; } 
     public DateTime UpdatedAt { get; set; } 
    } 
    public class DocumentResponsible 
    { 
     public int Id { get; set; } 
     public int DocumentId { get; set; } 
     public int TeamId { get; set; } 
    } 

我想寫一個實體框架式聯接三個表,並選擇一個文件表的各個領域和球隊的名字每個文件行。所以基本上我想加入三個表使用group_concat作爲團隊名稱。然後我想將它綁定到Web窗體中的gridview。

我都試過了,

(from dc in DBContext.Document 
join dr in DBContext.DocumentResponsible on dc.Id equals dr.DocumentId 
join t in DBContext.Team on dr.TeamId equals t.Id 
select new 
{ 
    Name = dc.Name, 
    Type = dc.Type, 
    Application = dc.Application, 
    Pcda = dc.Pcda, 
}).ToList(); 

,我剛纔試了一下,

var data = DBContext.Dcoument.Include("DocumentResponsibles").Tolist(); 
+0

「DcoumentResponsibles」是否應該拼寫成這樣?它似乎不符合你的命名的其餘部分。 –

+0

謝謝,我犯了一個錯字。 –

回答

0

很難幫助沒有你的DbContext和實體映射,但我會去一個說你可能只想把Document.DocumentResponsibles標記爲虛擬。

此外,在DocumentResponsible,也許你會希望添加屬性爲Document和一個用於Team(均標記爲虛擬太)這樣你就不必做連接鍵所有你想工作的時候用你的數據,一旦配置正確,EF會爲你做。

如果它不起作用,您可以將以下信息添加到您的問題:首先,您的上下文類和映射。其次,如果你做var firstDocument = yoneylemDB.Document.First(),那麼firstDocument是怎麼樣的?它是否填寫了所有的字段和屬性?有什麼奇怪的嗎?