2012-11-21 15 views
0

我有三個類。實體框架(5.0)代碼優先 - 在集合中插入集合

活動>研討會>研討會時報

我目前正在尋找插入記錄工作坊時代的最佳途徑,這是通過運行代碼首先使用ICollections。

尋找沿此線的東西,但我知道它不工作:

 //Create connection 
     var db = new Context(); 

     var Event = db.Events 
      .Include("Workshops") 
      .Include("Workshops.Times") 
      .Where(ev => ev.GUID == EventGUID).FirstOrDefault(); 

     Event.Workshops.Add(new Workshop 
     { 
      Name = tbWorkshopName.Text, 
      Description = tbWorkshopDescription.Text, 
      Times.Add(new WorkshopTime{ 
       //Information for times 
      }) 
     }); 

     db.SaveChanges(); 

砍下類:

public class Workshops{ 
    public int id { get; set; } 
    public string name { get; set; } 
    public ICollection<WorkshopTimes> Times{get;set;} 
} 
public class Events { 
    public int id { get; set; } 
    public string name { get; set; } 
    public ICollection<Workshops> WorkShops { get; set; } 
} 

public class WorkshopTimes { 
    public int id { get; set; } 
    public DateTime time { get; set; } 
} 

回答

0

你是絕對正確的軌道您的查詢上,但是你的包含語句顯示不正確。從你的模型我會期望:

var Event = db.Events 
     .Include("WorkShops") 
     .Include("WorkShops.events") 
     .Where(ev => ev.GUID == EventGUID).FirstOrDefault(); 

注意這使用屬性名稱而不是類型。這將確保列出的導航屬性中的實體將包含在結果中。

此外,還可以使用lambda做同樣的事情(但它的類型安全)

退房此處,瞭解如何做一個非常類似的場景,你的:

EF Code First - Include(x => x.Properties.Entity) a 1 : Many association

或羅文·米勒(從EF隊)

http://romiller.com/2010/07/14/ef-ctp4-tips-tricks-include-with-lambda/

並確保你是using System.Data.Entities爲基於lambda的包括(Where did the overload of DbQuery.Include() go that takes a lambda?

+0

我已經手動輸入了類,說實話,原始查詢是正確的項目中的實際類。沒有在我的電腦上從項目中獲得實際的課程。 - 我可以查詢結果並獲得我需要的結果,這是我遇到的插入問題。乾杯。 – ItWontWork

+0

@ItWontWork你可以在一些更詳細的信息中添加什麼工作,你看到了什麼行爲 –