我有一个独特的情况使用遗留应用程序,我有一个基于两个整数值的父/子关系。不幸的是,这些字段是不是 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])
这让我失望,因为对我来说,看起来两个键做的列数相同......
答案 0 :(得分:1)
好的,我根据Ben Hoffstein的评论认出来了。我在原始问题的更新中提到了我创建的视图。错误是由一个令人尴尬的愚蠢错误引起的。当我创建数组以列出外键的列名时,我将两个名称都放在引号中,如下所示:
new string() {"ParentItemID, ParentSubitemID"}
而不是:
new string() {"ParentItemID", "ParentSubitemID"}
NHibernate显示错误的方式让我失去了气味。