2012-05-31 82 views
1

我想知道有沒有人可以幫忙。父母與孩子有一對一的關係時,我有父母/子女關係,但孩子可以有許多父母。流利的NHibernate一對一 - >一對多的關係

父映射:

public sealed class DatumMap : ClassMap<Datum> 
{ 
    public DatumMap() 
    { 
     Id(x => x.Id); 
     Map(x => x.DataValue); 
     References(x => x.MergeField).Cascade.All(); 
    } 
} 

子映射:

public sealed class MergeFieldMap : ClassMap<MergeField> 
{ 
    public MergeFieldMap() 
    { 
     ReadOnly(); 
     Id(x => x.Id); 
     Map(x => x.Name); 
     Map(x => x.MergeTag); 
     HasMany(x => x.Data); 
    } 
} 

如果我創建了兩個新的脫離父母相同的新的孩子,然後將其保存了一個又一個,我會堅持兩個「副本「而不是重新使用現有的子實體。

如果存在通過查找起來並將其連接到第二父我可以強制子類的重用。

我在想,如果有一個更優雅的方式來實現這一目標,這樣,如果我嘗試和堅持什麼本質上是一樣的子實體,它使用現有的實體,否則它會創建一個新的孩子。

任何幫助將不勝感激。

回答

0

如果孩子已經存在,查找具有以某種方式進行。然而,哪兩個孩子是相同的商業邏輯是不同的,因此它不會發生在盒子外面。

// code to save new Parent 

Child child = ... 

var parent = new Parent { Child = child }; 

session.Save(parent); 

如果相同的手段ID(假設GeneratedBy分配),然後

Child child = session.Get<Child>(childId); 
if (child == null) 
    child = new Child(childId); 

,如果你知道孩子已經存在

// will generate a proxy instead of querying 
Child child = session.Get<Child>(childId); 

如有雷同指的是天然ID /鍵

Child child = session.Query<Child>().FirstOrDefault(c => c.UniqueProperty == uniqueProperty); 
if (child == null) 
    child = new Child(childId); 
相關問題