我在数据库中有用户表,我创建了 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();
}
现在,在第一种情况下,当我获取数据并将其保存在同一个会话中时,它可以工作。但是在第二种情况下,当我在一个会话中获取数据然后在另一个会话中保存相同的对象时它不起作用。我收到错误:“没有持久性:System.Collections.Hashtable”。我现在这是一种奇怪的要求,但如果有人知道我可以实现它的任何方法,我将不胜感激。
我对 User 表的休眠映射如下:
<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>"