NHibernate的奇怪的关系映射问题

时间:2010-06-16 21:55:38

标签: nhibernate nhibernate-mapping

我有一个独特的情况使用遗留应用程序,我有一个基于两个整数值的父/子关系。不幸的是,这些字段是不是 id和parentId或类似的东西。列是ItemId和SubItemId。当这两列彼此相等时,该项目被假定为父项。当它们不同时,ItemId引用Items父项,SubItemId只是它的子项的标识符。

这是一个例子 ItemId = 1,SubItemId = 1:父项 ItemId = 1,SubItemId = 6:Sub Item,其父项是id字段为(1,1)的Item ItemId = 2,SubItemId = 2:父项 ItemId = 2,SubItemId = 9:子项,其父项是id字段为(2,2)的项

所以有了这些信息,我就有了这样的类层次结构:

public class Item
    public property ItemId as Integer
    public property SubItemId as Integer
end class

class ParentItem : Item
end class

class SubItem : Item
    public property ParentItem as ParentItem
end class

所以我想使用NHibernate将SubItem类的ParentItem属性映射到其对应的ParentItem,我不能为我的生活找出方法。我能够让NHibernate基于公式鉴别器实例化正确的类,我希望类似的东西可用于多对一关系。

我无法更改表格结构,这肯定会限制我的选择。此外,我正在使用FluentNHibernate作为我的映射,因此可以使用其语法提供建议。

谢谢!

更新 我创建了一个视图,添加了两个新列,等同于指向父项的外键,现在我收到了NHibernate映射错误:

Foreign key (FK163E572EF90BD69A:ItemsNHibernateView [ParentItemID, ParentrSubitemID])) must have same number of columns as the referenced primary key (ItemsNHibernateView [ItemID, SubitemID])

这让我失望,因为对我来说,看起来两个键的列数相同......

1 个答案:

答案 0 :(得分:1)

好的,我根据Ben Hoffstein的评论认出来了。我在原始问题的更新中提到了我创建的视图。错误是由一个令人尴尬的愚蠢错误引起的。当我创建数组以列出外键的列名时,我将两个名称都放在引号中,如下所示:

new string() {"ParentItemID, ParentSubitemID"}

而不是:

new string() {"ParentItemID", "ParentSubitemID"}

NHibernate显示错误的方式让我失去了气味。