2010-08-25 58 views
0

我使用Nhibernate版本2.2将类映射到我的项目中的表。以下是我的类文件和映射文件Nhibernate不加载主键值

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> 

问题现在林有,每当我保存对象时,它自动生成的行ID保存的对象。但是,当我稍后从数据库中查询对象时(使用IQuery中的其他属性),我得到RowID始终设置为0的对象。 请问您是否需要告诉我如何使用当前的RowID检索对象。谢谢。

+0

你能给一些示例代码演示失败的负荷,等等? – DanP 2010-08-25 16:51:16

+0

我们需要代码。如果你使用的是Load ,那实际上是Get 你想要的。 – rebelliard 2010-08-25 17:19:17

回答

1

您应该设置name属性值的标识是这样的:

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

哇,它实际上工作:)非常感谢你。也感谢你DanP,Rafael在这件事情上的时间:) – Nadun 2010-08-26 12:41:04

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对象exept其行标识的所有细节。