2009-11-12 55 views

回答

5

舊的帖子...但萬一別人到達這裏尋找答案:

您需要將.AsSet()添加到HasManyToMany映射定義中。


mapping.HasManyToMany(x => x.Users) 
     .WithTableName("MessageReceivers") 
     .WithParentKeyColumn("UserId") 
     .WithChildKeyColumn("AdvanceMessageId") 
     .Inverse().AsSet(); 

這將建立一個唯一的,複合主鍵上,使用兩列的鏈接表約束。(聚集索引)

缺點是AsSet()不能用於IList類型的集合屬性,所以沒有for循環沒有投射。

我一直在使用ICollection並將它們實例化爲我的應用程序的HashSet,它運行良好。在徵收管理


更多信息與功能NHibernate:

列表:有序實體收集,複製允許的。在代碼中使用.net IList。索引列需要在NHibernate中映射。

設置:唯一實體的無序集合,不允許重複。在代碼中使用Iesi.Collection.ISet。重寫GetHashCode和Equals以指示重複的業務定義很重要。可以通過定義orderby或通過定義導致SortedSet結果的比較器來排序。

Bag:無序的實體列表,允許重複。在代碼中使用.net IList。該列表的索引列未被映射,並且不被NHibernate支持。

+0

非常有價值的信息;感謝分享。 – contactmatt 2015-09-02 02:20:10

2

你也應該關係的反向端地圖像

mapping.HasManyToMany(x => x.Users) 
     .WithTableName("MessageReceivers") 
     .WithParentKeyColumn("UserId") 
     .WithChildKeyColumn("AdvanceMessageId") 
     .Inverse(); 

在最新的功能NHibernate你會要改變

  • WithTableName - >表

  • WithParentKeyColumn - > ParentKeyColumn

  • WithChildKeyColumn - > ChildKeyColumn

相關問題