Fluent nhibernate 流利的NHibernate:如何使用独特的合同建立多对多关系

Fluent nhibernate 流利的NHibernate:如何使用独特的合同建立多对多关系,fluent-nhibernate,many-to-many,unique,Fluent Nhibernate,Many To Many,Unique,我想创建一个多对多关系,但我想在新表(MessageReceivers)中的两列(AdvanceMessageId,UserId)上都有一个唯一的约束: 感谢您的帮助您还应该映射关系的反面,如 mapping.HasManyToMany(x => x.Users) .WithTableName("MessageReceivers") .WithParentKeyColumn("UserId") .WithChildKeyColumn("Advanc

我想创建一个多对多关系,但我想在新表(MessageReceivers)中的两列(AdvanceMessageId,UserId)上都有一个唯一的约束:


感谢您的帮助

您还应该映射关系的反面,如

mapping.HasManyToMany(x => x.Users)
       .WithTableName("MessageReceivers")
       .WithParentKeyColumn("UserId")
       .WithChildKeyColumn("AdvanceMessageId")
       .Inverse();
在最新的Fluent NHibernate中,您必须进行更改

  • WithTableName->Table

  • WithParentKeyColumn->ParentKeyColumn

  • WithChildKeyColumn->ChildKeyColumn


旧帖子。。。但如果有人来这里寻找答案:

您需要将.AsSet()添加到HasManyToMany映射定义中


i、 e

这将在使用两列的链接表上设置唯一的复合主键约束。 (聚集索引)

缺点是AsSet()不能与IList类型的集合属性一起使用,因此没有强制转换的循环就没有

我一直在使用ICollection并将它们实例化为我的应用程序的哈希集,效果很好


有关Fluent Nhibernate收集管理的更多信息:

列表:实体的有序集合,允许重复。在代码中使用.net IList。索引列需要映射到NHibernate中

集合:唯一实体的无序集合,不允许重复。在代码中使用Iesi.Collection.ISet。重写GetHashCode和Equals以指示duplicate的业务定义非常重要。可以通过定义orderby或通过定义比较器(产生SortedSet结果)进行排序

包:无序的实体列表,允许重复。在代码中使用.net IList。NHibernate未映射列表的索引列,也不支持该列

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