c# - fluent nhibernate - 同一实体上的多对多关系映射

标签 c# nhibernate fluent-nhibernate many-to-many entity-relationship

我在尝试映射多对多关系时遇到问题,其中关系的双方都引用同一个实体。我正在使用 Fluent NHibernate 和 NH3.1。

基本上,场景是这样的——我有一个类别,它可以有多个父级。因此,一个类别有多个其他类别作为父类别,以及多个其他类别作为其子类别。

HasManyToMany(x => x.ParentCategories).AsBag().Table("parentcategorychildren").ParentKeyColumn("ChildID").ChildKeyColumn("ParentID").Cascade.SaveUpdate();
HasManyToMany(x => x.ChildrenCategories).AsBag().Table("parentcategorychildren").ParentKeyColumn("ParentID").ChildKeyColumn("ChildID").Inverse();

但是,当我尝试构建工厂时,出现以下错误:

The relationship Category.ChildrenCategories to Category.ChildrenCategories has Inverse specified on both sides. Remove Inverse from one side of the relationship.

我觉得奇怪的是为什么它在 Category.ChildrenCategories 中提到“Category.ChildrenCategories”,而不是 ParentCategories?

任何帮助将不胜感激!

我刚刚为此创建了一个赏金,因为它对我来说足够重要。拜托,我对“你不能这样做”作为答案不感兴趣。

最佳答案

这很可能是 FNH 错误,并且很可能已在最新的 FNH 中修复 source code .使用FNH1.0和NH2.1时没有问题。等效的 HBM 映射在 FNH1.2 和 NH3.1 中运行良好:

<bag name="ParentCategories" cascade="all" table="parentcategorychildren">
    <key column="ChildID" />
    <many-to-many column="ParentID" class="Category" />
</bag>

<bag name="ChildrenCategories" inverse="true" table="parentcategorychildren">
    <key column="ParentID" />
    <many-to-many column="ChildID" class="Category" />
</bag>

编辑: 在深入研究 FNH 源代码后,我找到了一个解决方法。比方说,您的配置如下所示:

.Mappings(m => {
    m.FluentMappings.AddFromAssemblyOf<Category>();
})

这个配置可以抑制不幸的代码:

.Mappings(m => {
    var persistenceModel = new PersistenceModel();
    persistenceModel.AddMappingsFromAssembly(typeof(Category).Assembly);
    persistenceModel.ValidationEnabled = false; // this makes the trick
    m.UsePersistenceModel(persistenceModel);
})

关于c# - fluent nhibernate - 同一实体上的多对多关系映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5717973/

相关文章:

c# - Enum.GetValues 中的意外行为或传递 Enums

c# - Fluent NHibernate Composite ID表问题

C#/WPF : Implementing Autosave

c# - String.Format() 拆分整数值

.net - 从 .NET 2 切换到 .NET 4 后站点变慢和错误

c# - 我是否应该始终在 nhibernate 中使用事务(即使是简单的读写)?

c# - Fluent NHibernate 异常 : An association from the table X refers to an unmapped class: System. 字符串

nhibernate - 如何使用 Fluent NHibernate 设置自定义 DriverConnectionProvider

c# - OfType<> 与 NHibernate Proxy 类不能很好地配合

c# - 使用 C# WebBrowser 插入 CSS