NHibernate Mapping - 通过表多对一

时间:2010-08-31 13:47:08

标签: nhibernate nhibernate-mapping

我正在使用具有以下结构的现有数据库。更改数据库架构是最后的手段。

Products
   Id
   Name

ParentProducts
   ParentId
   ChildId

我不想要ParentProducts的实体,我对children属性有以下内容(仍需要测试它,但这就是概念)。

<bag name="Children" lazy="true" table="dbo.ParentProducts" cascade="save-update" inverse="true" >
   <key column="[ChildId]"></key>
   <many-to-many column="[ProductId]" class="Product" />
</bag>

我正在努力的是如何创建父属性?我想做类似下面的事情,但是table不是多对一的有效属性。

<many-to-one name="Parent" column="[ParentId]" table="dbo.ParentRelated" class="Policy" />

我可以创建一个包,只看第一个项目,但这更像是一个黑客。

有什么想法吗? 感谢

1 个答案:

答案 0 :(得分:2)

创建包是最简单的解决方案。你可以给它一个干净的界面:

protected virtual ICollection<Product> Parents { get; set; }

public virtual Product Parent
{
    get
    {
        return Parents.SingleOrDefault();
    }
    set
    {
        Parents.Clear();
        Parents.Add(value);
    }
}

有了这个,其余的代码不需要知道DB /映射结构。