Lul*_*aby 5 many-to-many unique fluent-nhibernate
我想创建多对多关系,但我希望在新表(MessageReceivers)中对两个列都有唯一的约束(AdvanceMessageId,UserId):
mapping.HasManyToMany(x => x.Receivers)
       .WithParentKeyColumn("AdvanceMessageId")
       .WithChildKeyColumn("UserId")
       .Cascade.All()
       .LazyLoad()
       .WithTableName("MessageReceivers");
感谢帮助
旧帖...但万一其他人到这里寻找答案:
您需要将.AsSet()添加到HasManyToMany映射定义中.
即
mapping.HasManyToMany(x => x.Users)
       .WithTableName("MessageReceivers")
       .WithParentKeyColumn("UserId")
       .WithChildKeyColumn("AdvanceMessageId")
       .Inverse().AsSet();
这将在使用两列的链接表上设置唯一的复合主键约束.(聚集索引)
缺点是AsSet()不能与IList类型的集合属性一起使用,所以没有for的循环没有.
我一直在使用ICollection并将它们实例化为我的应用程序的HashSet,它运行良好.
有关Fluent Nhibernate的集合管理的更多信息:
清单:有序的实体集合,允许重复.在代码中使用.net IList.索引列需要在NHibernate中映射.
设置:无序的唯一实体集合,不允许重复.在代码中使用Iesi.Collection.ISet.重写GetHashCode和Equals以指示重复的业务定义很重要.可以通过定义orderby或通过定义生成SortedSet结果的比较器来进行排序.
行李:无序的实体列表,允许重复.在代码中使用.net IList.列表的索引列未映射,也不受NHibernate的尊重.
| 归档时间: | 
 | 
| 查看次数: | 5305 次 | 
| 最近记录: |