2010-08-31 97 views
0

我正在使用具有以下结构的现有数据库。更改数据库模式是最后的手段。NHibernate映射 - 多对一通过表

Products 
    Id 
    Name 

ParentProducts 
    ParentId 
    ChildId 

我不想为ParentProducts一个实体,我对孩子财产以下(仍然需要对其进行测试,但是这是概念)。

<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> 

我在苦苦挣扎的是如何创建一个Parent属性?我想做类似以下的事情,但表格不是多对一的有效属性。

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

我可以创建一个包,只能看第一个项目,但这更多的是黑客攻击。

任何想法? 谢谢

回答

2

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

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

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

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