我有一个独特的情况与遗留应用程序,我有一个基于两个整数值的父/子关系。不幸的是,这些字段是而不是 id和parentId或类似的东西。这些列是ItemId和SubItemId。当这两列彼此相等时,该项目被假定为父项。当它们不同时,ItemId引用Items父项,而SubItemId只是它的子项的标识符。NHibernate的奇怪关系映射问题
下面是一个例子 项目Id = 1,SubItemId = 1:父件 项目Id = 1,SubItemId = 6:子项,其父是Item其中ID字段是(1,1) 项目Id = 2 ,SubItemId = 2:父件 项目Id = 2,SubItemId = 9:子项,其父是Item其中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
所以我想映射SubItem cl的ParentItem属性屁股到相应的ParentItem使用NHibernate和我不能为我的生活弄清楚如何。我能够让NHibernate基于公式鉴别器实例化正确的类,并且我希望类似的东西可以用于多对一的关系。
我无法更改表格结构,这当然限制了我的选择。另外,我为我的映射使用FluentNHibernate,所以随意使用它的语法提供建议。
谢谢!
更新 我创建的补充,等同于一个外键指向父,现在我得到一个NHibernate的映射错误两个新列视图:
Foreign key (FK163E572EF90BD69A:ItemsNHibernateView [ParentItemID, ParentrSubitemID])) must have same number of columns as the referenced primary key (ItemsNHibernateView [ItemID, SubitemID])
这是扔我送行因为对我来说,它看起来像两个键做具有相同的列数...
我知道你说你不能改变表结构,但是你能够在数据库端创建一个视图来处理数据,然后它到达NHibernate? – 2010-06-16 22:09:01
我不认为创建视图会是一个问题。 目前,我们已经有了用于创建和编辑这些项目的其他机制。我们只是希望将我们的物品表映射为支持其他物品的需求,并作为迈向更美好未来的第一步! ;) – Andorbal 2010-06-17 13:40:05