NHibernate - 获得一对多

时间:2012-11-26 21:13:11

标签: c# nhibernate

想知道是否有人能指出我正确的方向..

我目前在sqlserver数据库中有以下3个表

参数 参数标识 参数名称

的parameterValue ParameterValueId 的parameterValue

ParameterParameterValue 参数标识 ParameterValueId

我正试图在参数域对象也将获取所有ParameterValue对象的地方(我猜测参数与ParameterValue有一对多的关系,因为参数可以有多个值) )但我没有在哪里 - 我已经实现的msot是获取第一个值,而不是全部:(

如果有人愿意提供帮助或任何我可以发布一些代码和/或我正在使用的映射 - 一如既往,我们非常感谢任何帮助:)

参数映射

<?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
               namespace="StockMarketAdvisorDatabaseAccess.Domain" 
               assembly="StockMarketAdvisorDatabaseAccess">
<class name="Parameter" table="Parameter">
        <id name="ParameterId">
            <column name="ParameterId" sql-type="int" not-null="true" />
            <generator class="identity" />
        </id>
        <property name="ParameterName" />
        <bag name="ParameterValues" table="ParameterParameterValue" cascade="none">
            <key column="ParameterValueId" />
            <one-to-many class="ParameterValue" />
        </bag>
    </class>
</hibernate-mapping>

ParameterValue的映射

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
                   namespace="StockMarketAdvisorDatabaseAccess.Domain" 
                   assembly="StockMarketAdvisorDatabaseAccess">
    <class name="ParameterValue" table="ParameterValue">
        <id name="ParameterValueId">
            <column name="ParameterValueId" sql-type="int" not-null="true" />
            <generator class="identity" />
        </id>
        <property name="Value" column="ParameterValue"/>
     </class>
</hibernate-mapping>

再次感谢,刚刚开始使用nHibernate,所以仍然试图解决大部分问题! :)

1 个答案:

答案 0 :(得分:1)

你的问题是你描述了一件事(1-many),但你的表结构是另一种(很多)

如果每个参数需要多个值,那么您应该将表结构简化为:

  

参数
  -------------
  * ParameterId
  参数名称
  

  
的parameterValue   --------------------
  * ParameterValueId
  参数标识
  的parameterValue

然后你的映射可以使用1-many映射:

<class name="Parameter" table="Parameter">
    <id name="ParameterId">
        <column name="ParameterId" sql-type="int" not-null="true" />
        <generator class="identity" />
    </id>
    <property name="ParameterName" />
    <bag name="ParameterValues" table="ParameterValue" cascade="none">
        <key column="ParameterId" />
        <one-to-many class="ParameterValue" />
    </bag>
</class>