Nhibernate不加载主键值

时间:2010-08-25 16:10:08

标签: c# nhibernate

我正在使用Nhibernate 2.2版将类映射到项目中的表。以下是我的类文件和映射文件

public abstract class BasicUser
{        
    public virtual int RowID { get; set; }

    public virtual string DisplayName { get; set; }

    public BasicUser()
    {
    }
}

<class name="BasicUser" table="UserAccounts"  >
<id column="RowID" type="Int32">
  <generator class="native" />
</id>
<property name="DisplayName" type="String" length="25" />
<!-- More mapping members -->
</class>

现在我遇到的问题是,每当我保存一个对象时,它就会自动为对象生成RowID。但是当我稍后从数据库中查询对象时(使用IQuery中的一些其他属性),我得到RowID始终设置为0的对象。 你能不能告诉我如何使用当前的RowID来回溯一个对象。谢谢。

2 个答案:

答案 0 :(得分:1)

您应该为Id设置名称属性值,如下所示:

<class name="BasicUser" table="UserAccounts"  >
<id column="RowID" type="Int32" Name="RowID">
  <generator class="native" />
</id>
<property name="DisplayName" type="String" length="25" />
<!-- More mapping members -->
</class>

答案 1 :(得分:0)

非常抱歉延迟的人,我离开了睡觉:) ..继承人我的代码

BasicUser user = null;
using (ISession session = sessionFactory.OpenSession())
{
    IQuery query = session.CreateQuery("From BasicUser user where user.Email=?");
    query.SetString(0, email);
    query.SetMaxResults(1);
    IList<BasicUser> results = query.List<BasicUser>();
    if (results.Count > 0)
        user = results[0];
}
return user;

此代码有效,我获取BasicUser对象的所有详细信息,并删除其行ID。