C# 实体框架(5.0)代码优先-插入集合中的集合

C# 实体框架(5.0)代码优先-插入集合中的集合,c#,asp.net,entity-framework,code-first,C#,Asp.net,Entity Framework,Code First,我有三节课 活动>车间>车间时间 我目前正在寻找将记录插入车间时间的最佳方法,这是使用ICollections首先运行代码 寻找类似的东西,但我知道它不起作用: //Create connection var db = new Context(); var Event = db.Events .Include("Workshops") .Include("Workshops.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; }
}
公共课堂研讨会{
公共int id{get;set;}
公共字符串名称{get;set;}
公共ICollection Times{get;set;}
}
公开课活动{
公共int id{get;set;}
公共字符串名称{get;set;}
公共ICollection工作坊{get;set;}
}
公共课堂工作时间{
公共int id{get;set;}
公共日期时间{get;set;}
}

您的查询无疑是正确的,但是您的include语句似乎不正确。从您的模型中,我希望:

    var Event = db.Events
        .Include("WorkShops")
        .Include("WorkShops.events")
        .Where(ev => ev.GUID == EventGUID).FirstOrDefault();
注意:这使用的是属性名称,而不是类型。这将确保所列资产净值属性中的实体将包括在结果中

此外,您还可以使用lambda执行相同的操作(但其类型安全)

查看此处,了解如何执行与您非常类似的场景:

或者来自rowan miller(来自EF团队)


并确保您使用的是基于lambda的includes()
的System.Data.Entities

老实说,我已经手动键入了这些类,原始查询对于项目中的实际类是正确的。没有在我的电脑上从项目中获取实际的课程我可以查询结果并得到我需要的信息,这是我遇到的问题。干杯。@ItWontWork你能补充一些关于什么不起作用,你看到了什么行为的细节吗