2012-12-11 55 views
0

我有以下情形的實體:在運行時創建兩個「父」實體。他們每個人都參考一個「共享」的子實體。如何堅持有參考共享子實體

下面是一些僞代碼:

public class Parent 
{ 
    public Parent(Child child) 
    {...} 
    public Child { get; } 
} 

Child child = new Child(); 
Parent mother = new Parent(child) 
Parent father = new Parent(child) 

我想能夠獨立並有可能因此從救母親和父親的實例在一個單獨的線程不同的會話和事務中。

如何處理與NH兒童實體的儲蓄?

OK,18次和沒有意見......我想我需要多補充一些澄清。

我的映射定義的孩子應該在家長的堅持被自動持久。

什麼將孩子實體發生時

session.Save(father) 

被稱爲一個線程,

session.Save(mother) 
在不同的線程

+0

你在哪裏得到的卡處理DuplicateKeyException ld從?是否足以保持對孩子的引用或每個線程是否會改變孩子? – Firo

+0

家長不改變孩子只有它的參考。這就像將產品類別分配給產品一樣,其中產品類別即時創建。 – Nafas

回答

0

當它從評論說,孩子只需要爲它是保存在每個線程使用session.Load<Child>(knownChildId)參考看起來。這將爲同一個對象創建2個不同的代理。

如果孩子尚未保存和層疊設置,那麼有可能是一個潛在的競爭條件,要麼

  • session.Save(father);
  • 之前創建該過程中,父母
  • lock(child)線程之前保存共享兒童
  • 引進的唯一約束在兒童中的業務鍵和螺紋