我有三节课。
活动>工作坊>工作坊时间
我目前正在寻找将记录插入Workshop Times的最佳方法,这是首先使用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 :(得分: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/
并确保基于lambda的包含(Where did the overload of DbQuery.Include() go that takes a lambda?)
是using System.Data.Entities