2011-12-12 18 views
0

我有這樣一個類:我怎麼能在兩個屬性創建涉及邏輯UNIQUE約束與功能NHibernate

public class Link 
{ 
    public virtual long Id { get; set; } 
    public virtual string IdentifierA { get; set; } 
    public virtual string IdentifierB { get; set; } 
} 

和類似這樣的映射:

public class LinkMap : ClassMap<Link> 
{ 
    public LinkMap() 
    { 
     Id(x => x.Id); 
     Map(x => x.IdentifierA); 
     Map(x => x.IdentifierB); 
    } 
} 

我想只存儲鏈接,A,在那裏沒有鏈接,B,在數據庫中這樣的:

((A.IdentifierA == B.IndentifierA && A.IdentifierB == B.IdentifierB) || (A.IdentifierA == B.IndentifierB && A.IdentifierB == B.IdentifierA)) 

那是我認爲任何兩個鏈接在兩個給定的標識符之間作爲相同的鏈接,並且只想要存儲其中的一個。

我可以用Fluent NHibernate來設置嗎?如果是,如何?

回答

1

您可以定義數據庫中唯一約束

Map(x => x.IdentifierA).UniqueKey("Identifier_key"); 
Map(x => x.IdentifierB).UniqueKey("Identifier_key"); 

但在你的情況,我認爲它更好地碼在一個地方處理。選擇是否存在具有指定條件的實體並返回它而不是保存新實體。

+0

該映射使我獲得了一半的方式,但並不禁止old.IdentifierA == new.IdentifierB && old.IdentifierB == new.IdentifierA。正如你推薦的,我有一個代碼工作的解決方案。似乎我會堅持。感謝您的回答! –