【问题标题】:Using joins in nhibernate在 nhibernate 中使用连接
【发布时间】:2011-06-11 08:37:04
【问题描述】:

我的应用程序代码如下所示

表格

tblPerson
---------
PersonId (PK)
Name

tblAddress
----------
AddressId(PK)
Address

PersonAddress
-------------
PersonId (PK)
AddressId

实体类

PersonAddresstbl.cs

public class PersonAddressl
{
    private int personid;
    private int addressid;
    private string name;

    public virtual int PersonId
    {
        get { return personid; }
        set { personid = value; }
    }

    public virtual int AddressId
    {
        get { return addressid; }
        set { addressid = value; }
    }

    public virtual string Name
    {
        get { return name; }
        set { name = value; }
    }
}

xml 文件

PersonAddresstbl.hbn.xml

<class name="PersonAddressl">
  <id name="id" column="PersonId">
    <generator class="native"/>
  </id>
  <join table="tblPersonAddress"
      optional="true">
    <key column="PersonId"
        unique="true"/>
    <many-to-one name="Address"
        column="AddressId"/>
  </join>
</class>

<class name="tblAddress">
  <id name="id" column="AddressId">
    <generator class="native"/>
  </id>
</class>

实现是

PersonAddresstbl tbl = new PersonAddresstbl();

Criteria crit = session.CreateCriteria(typeof(PersonAddresstbl));
IList lst = crit.List();

返回 0 条记录。

谁能告诉我我是走在正确的道路上还是哪里出错了?

谢谢, 帕万

【问题讨论】:

  • 1) 您的映射为“id”,但您的班级具有“personid”属性。 2)为什么你的桌子上有'tbl'前缀?这不是 1990 年... 3) 你的“personaddress”为什么你的主键不是两列?这是一个多对多。
  • @Phil - re (2),没必要批评风格。
  • @j0k - 当然是 :) 帮助人们改善他们的造型。一次批评 1 次。
  • @Phill ;) 也伤害了我的眼睛,但不管对他们有用。

标签: c# nhibernate join


【解决方案1】:

很难判断问题出在哪里,但在故障排除时我总是使用 nHibernate 启用 show_sql 以便我可以看到生成的 SQL(因此您可以在数据库查询窗口中尝试)。有关信息,请参阅此链接:Enable show_sql in nHibernate

【讨论】:

  • 您好豪克曼,感谢您的回复。我尝试了您建议的解决方案。输出窗格会自动显示 sql 还是我需要为此使用任何命令?
  • @pavan - 你需要先修复你的映射。他们到处都是。
  • 它应该会自动显示。但正如@Phill 所指出的,您的映射看起来有点奇怪。
【解决方案2】:

我觉得奇怪的是,你的类 'Person' 有一个属性 'AddressId',它是整数类型,而在你的映射中(Person 类 - 嗯,它有一个奇怪的名字PersonAddressl' - 您指定您与类 'Address' 具有一对多的关系。 除此之外,我没有看到你有一个类'Address'。 而且,您的数据库模型在 Person 和 Address 之间具有多对多关系。

您正在使用join 映射,它使您能够将两个数据库表中的数据“合并”到一个类中,但您的类模型并未反映这一点。 在此处查看有关 join 属性的更多信息:http://ayende.com/blog/3961/nhibernate-mapping-join

也检查“设置”:http://ayende.com/blog/3943/nhibernate-mapping-set

【讨论】:

  • 您好,我参考了文章docs.jboss.org/hibernate/core/3.5/reference/en/html/…(7.3.2。多对一)来创建xml文件。我是否需要创建实体类文件,例如带有 personid、name (get,set) 的 tblPerson.cs 和带有 person、address (get,set) 的 tblAddress.cs 不需要我拥有 PersonAddresstbl.cs 的 cs 文件,并且xml 文件应该映射到 tblperson 和 tblAddress 类文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-23
  • 2015-11-28
  • 2011-09-05
相关资源
最近更新 更多