0

我有三个班。

活动 > 创意工坊 > 创意工坊时间

我目前正在寻找将记录插入 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; }
}
4

1 回答 1

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 : 许多关联

或来自罗文米勒(来自 EF 团队)

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

并确保您使用using System.Data.Entities基于 lambda 的包含(DbQuery.Include() 的重载在哪里需要一个 lambda?

于 2012-11-21T10:28:04.583 回答