0

私は3つのクラスを持っています。

イベント > ワークショップ > ワークショップ時間

現在、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

クエリは間違いなく正しい方向に進んでいますが、include ステートメントが正しくないように見えます。あなたのモデルから私は期待します:

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

これは型ではなくプロパティ名を使用することに注意してください。これにより、リストされた nav プロパティのエンティティが結果に含まれるようになります。

さらに、ラムダを使用して同じことを行うことができます (ただし、タイプセーフです)。

あなたのシナリオと非常によく似たシナリオを実行する方法については、こちらをご覧ください。

EF Code First - Include(x => x.Properties.Entity) a 1 : 多数の関連付け

またはrowan millerから(EFチームから)

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

そしてusing System.Data.Entities、ラムダベースのインクルードを使用していることを確認してください(ラムダを取るDbQuery.Include()のオーバーロードはどこに行きましたか? )

于 2012-11-21T10:28:04.583 に答える