【问题标题】:How to query many to many relationship in NHibernate?如何在 NHibernate 中查询多对多关系?
【发布时间】:2011-12-11 10:04:09
【问题描述】:

我是 NHibernate 的新手,我想开始使用这项伟大的技术进行开发。

下面是我的表关系:

表架构

http://dl.dropbox.com/u/33698629/Entities.JPG

tblAirport
  AirportID
  AirportShortName
  AirportFullName
  AirportTel

tblGroup
  GroupID
  GroupName

tblAirportGroup
  AirportID
  GroupID

我已将 hbm.xml 模式定义如下:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="TelDir.Core.Domain.Airport, TelDir.Core" table="tblAirport" lazy="false">
    <id name="ID" column="AirportID" unsaved-value="0">
      <generator class="identity" />
    </id>

    <property name="AirportShortName" column="AirportShortName" />
    <property name="AirportFullName" column="AirportFullName" />

    <set name="Groups" cascade="none" table="tblAirportGroup" lazy="false" access="readonly">
      <key column="AirportId"/>
      <many-to-many class="TelDir.Core.Domain.Group, TelDir.Core" column="GroupId"/>
    </set>


  </class>
</hibernate-mapping>


<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="TelDir.Core.Domain.Group, TelDir.Core" table="tblGroup" lazy="false">
    <id name="ID" column="GroupID" unsaved-value="0">
      <generator class="identity" />
    </id>

    <property name="GroupName" column="GroupName" />   

    <bag name="Airports" cascade="none" table="tblAirportGroup" lazy="false" >
      <key column="GroupID"/>
      <many-to-many class="TelDir.Core.Domain.Airport, TelDir.Core" column="AirportId"/>
    </bag>
  </class>
</hibernate-mapping>

我的映射是否正确?如何检索属于机场的组(组名)列表?

我尝试过使用这种语法

ISession session = NHibernateSessionManager.Instance.GetSession();
ISet<Group> rValue = session.CreateCriteria(typeof(Airport))
.CreateCriteria("Groups")
.Add(Expression.Eq("ID", ap.ID))
.List() as ISet<Group>;

但它没有给我任何结果。

你能指导我吗?

最好的问候,

【问题讨论】:

    标签: nhibernate many-to-many hibernate-mapping


    【解决方案1】:

    您可以通过以下方式获取包含 ID 为 33 的 Airport 的组,例如:

    var groups = session.CreateCriteria<Group>()
                     .CreateCriteria("Airports")
                     .Add(Restrictions.Eq("ID", 33))
                     .List<Group>();
    

    【讨论】:

    • 顺便问一下,我怎样才能从机场删除一个组?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    • 2013-11-22
    • 2011-11-13
    • 1970-01-01
    相关资源
    最近更新 更多