0

我正在研究 LINQ。在一个事务中,我必须更新三个不同的表。

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

这里 B1 是我数据库中的自动编号。我想一起提交所有更改。所以在一个数据上下文中我写了

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 回答