2010-08-25 57 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其行標識的所有細節。