我在數據庫中有用戶表,並且我創建了用於從該表中獲取數據的Nhibernate映射。我創建了動態映射,該映射返回響應而不是用戶類型的哈希表列表,因爲用戶沒有物理類。我對獲取和保存數據的代碼如下:如何在nhibernate中保存動態對象
dynamic user = null;
using (ISession session = factory.OpenSession())
{
user = session.CreateQuery("select u from User as u").List();
user[0]["LastName"] = "s";
session.Save(user[0]);
session.Flush();
}
using (ISession otherSession = factory.OpenSession())
{
user[0]["LastName"] = "ssss";
otherSession.Save(user[0]);
otherSession.Flush();
}
現在,在第一種情況下,當我取數據,並將其保存在同一個會議上,它的工作原理。但在第二種情況下,當我在一個會話中獲取數據,然後在另一個會話中保存同一個對象時,它不起作用。我得到錯誤:「沒有persister:System.Collections.Hashtable」。我現在認爲它是一種奇怪的要求,但如果有人知道我能做到的任何方式,我會感激的。
我的用戶表NHibernate的映射如下:
<hibernate-mapping xmlns='urn:nhibernate-mapping-2.2' >
<class entity-name='User' table='`User`'>
<id name='UserId' column='`UserId`' type='string'>
<generator class='identity'>
</generator>
</id>
<property name='CreatedOn' column='`CreatedOn`' type='DateTime' />
<property name='FirstName' column='`FirstName`' type='string' />
<property name='LastName' column='`LastName`' type='string' />
<property name='LastUserNewResultAcknowledgedTime' column='`LastUserNewResultAcknowledgedTime`' type='string' />
<property name='LoginName' column='`LoginName`' type='string' />
<property name='LoginPassword' column='`LoginPassword`' type='string' />
<property name='ModifiedBy' column='`ModifiedBy`' type='string'/>
<property name='ModifiedOn' column='`ModifiedOn`' type='DateTime' />
</class>
</hibernate-mapping>"
似乎你並沒有使用動態,因爲這是一個常規的類映射。您報告的錯誤可能是由於忘記了「Embedded Resource」作爲hbm文件上的標誌。 –
@FelicePollano,我會說這是** dnymic模型**映射。雖然它看起來與類(在.hbm.xml文件中)相同,但它將被轉換爲字典而不是「User」類(請參閱我的答案中的鏈接) –