0

私はLINQに取り組んでいます。1 つのトランザクションで、3 つの異なるテーブルを更新する必要があります。

例: A(A1,A2,A3) B(B1,B2) AB(A1,B1)

ここで B1 は私のデータベースの自動番号です。すべての変更をまとめて提出したい。だから私が書いた1つのデータコンテキストで

using (BBBDataContext DC= new BBBDataContext())
 {
                A tba = new A()
                {
                    A1 = this.A1,
                    A2 = this.A2,
                    A3 = this.A3,
                };

                    DC.A.InsertOnSubmit(tba);
                    B tbb= new B()
                    {
                        B2 = this.B2,
                    };
                    DC.B.InsertOnSubmit(tbb);

        // NOW i WONT B1(WHICH IS AUTONUMBER) FROM B SO THAT I USE IT IN MY NEXT TABLE.

                AB tbab = new AB()
                {
                    A1 = this.A1,
                    B1 = ??????,
                };
              DC.AB.InsertOnSubmit(tbab);
      //FINALLY I WILL WRITE SUBMIT CHANGES SO MY ALL TABLES GET CHANGES SAME TIME


               DC.SubmitChanges();
}

質問: @ ????? の場所には何を書けばよいですか。ABテーブルのB1の場合??

4

1 に答える 1

2

短い答え: B

もう少し長い答え: オブジェクトを作成して追加すると、コミットする前に ID を取得できません。したがって、オブジェクトの ID プロパティではなく、オブジェクトを参照します。

class A {
    public int Id  { get;set;}
    public ICollection <B> Bees { get;set;}
}

class B {
    public int Id { get;set;}
    public int InstanceOfAId { get;set;}
    public A InstanceOfA { get;set;}
}

var a = new A();
var b = new B();

b.InstanceOfA = a;

モデルに応じて、関係を定義します。最初のコードでは、次のようにすることができます。

    EntityTypeConfiguration<B> cfgB = new EntityTypeConfiguration<B>();
        cfgB.HasRequired(p => p.InstanceOfA).WithMany(p => p.Bees)
.HasForeignKey(p => p.InstanceOfAId);

EDMX では、デザイナーで同じことができます。

InstanceOfA挿入時に割り当てに使用します。その後、InstanceOfAId常に Id 値が保持されます。データを取得するInstanceOfAときは、要求された場合にのみ入力されます。

次のように使用できます。

var x = DC.B.Include(p=>p.A);

また

var x = DC.B.Select(p=> new { Id = p.Id, A_Id = p.A.Id});

また

var x = DC.A.Select(p=> new { Id = p.Id, BeeCount = p.Bees.Count()});
于 2012-11-21T20:55:56.617 に答える