我有一个数据模型,我不确定流利的nHibernate支持 - 想知道是否有人能告诉我它是否确实如此,如果是的话,该怎么做。基本结构是:
create table Container (
id int identity(1,1) NOT NULL,
root_item_id int
)
create table ItemRelationship (
id int identity(1, 1) NOT NULL,
parent_item_id INT,
child_item_id INT
)
create table Item (
id int identity(1, 1) NOT NULL,
description VARCHAR(20)
)
简而言之: 1)容器有一个根项 2)物品可以有儿童物品
我想要的是我的“容器”实体上的属性,该实体是作为其根项目的儿童的项目的集合。我可以看到如何设置“直接”FK关系,但这个有点不寻常,因为关系链是:
Container.root_item_id - > ItemRelationship.parent_item_id
那里没有明确的FK。我假设我必须以某种方式使用“Where”方法,但我不确定如何 - 无法找到示例。有什么想法吗?
答案 0 :(得分:0)
我认为您的问题可以通过相对简单的便利性来解决;让我看看我是否有这个权利:
项目之间存在多对多关系(在ItemRelationship表中维护)。因此,默认情况下,您应该能够为ChildItems定义一个带有属性的Item类(您的ClassMap将在其中调用HasManyToMany())。您的Container类将具有Item类型的Root_Item属性(刚才提到的具有ChildItems列表)。然后,您可以在Container上创建一个方便属性,返回其Root_item的ChildItems。例如:
public class Container
{
public virtual Item Root_Item { get; set; }
public List<Item> ChildItems
{
get {
if (Root_Item != null)
return Root_Item.ChildItems;
return new List<Item>(); // or null depending on how you want to handle this
}
}
}