我有2個實體,假設它們A和B之間的關係是多到很多,所以我有另一個實體,假設C.
EF 4.1代碼第一次:多對多
列於表答:
-Id(PK) - 爲表B> int類型由數據庫生成
-PropertyA1
-PropertyA2
-PropertyA3
色譜柱:
-Id(PK) - > int類型的數據庫生成
-Description
列於表C(對於這個表,我不知道這是否是最好添加由數據庫生成的ID爲以前的一個額外的列表):被插入於種子方法
-IDA(PK和也外鍵實體A)
-IdB(PK和也外鍵實體B)
表B具有固定值(overrided )。其條目是象下面這樣:
Id描述
1 「一些描述1」
2 「一些說明2」
3 「一些說明3」
從一種形式,用戶介紹有關的信息表A(propertyA1,...,propeprtyA3),然後單擊按鈕將數據保存到數據庫。
一旦用戶點擊按鈕的形式將數據保存到數據庫中,我首先做到以下幾點:
A a = new A(){ PropertyA1=something_1,
PropertyA2=something_2,
PropertyA3=something_3 };
context.A.Add(a);
context.SaveChanges();
那麼作爲更改保存到數據庫後,我已經通過數據庫生成的ID(我之前還沒有ID保存到數據庫),也就是a.Id,現在我可以繼續做添加到表C中的條目:
B b = this.ObtainAppropriateB();
C c = new C(){ IdA = a.Id,
IdB = b.Id };
context.C.Add(c);
context.SaveChanges();
我的問題是:
1)我不知道a.Id以前做context.SaveChanges af ter.A.Add(a)因爲它是由數據庫生成的。
2)如果在context.C.Add(c)之後context.SaveChanges失敗,我如何回滾以及以前的工作?
context.A.Add(a);
context.SaveChanges();
我不能做以下的,因爲我沒有a.Id以前做的SaveChanges:
A a = new A(){ PropertyA1=something_1,
PropertyA2=something_2,
PropertyA3=something_3 };
context.A.Add(a);
B b = this.ObtainAppropriateB();
C c = new C(){ IdA = a.Id,
IdB = b.Id };
context.C.Add(c);
context.SaveChanges(); <--- I call it once to persist changes to database
如何解決這個問題?
你是說A和B之間的關係是'多對多'? – Komengem
是的,問題是什麼? – user1624552