データベースにUserテーブルがあり、そのテーブルからデータをフェッチするためのNhibernateマッピングを作成しました。Userの物理クラスが存在しないため、Userタイプではなく応答としてハッシュテーブルのリストを返す動的マッピングを作成しました。データをフェッチして保存するための私のコードは次のとおりです。
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();
}
さて、最初のケースでは、データをフェッチして同じセッションに保存すると、機能します。しかし、2番目のケースでは、あるセッションでデータをフェッチしてから、同じオブジェクトを別のセッションに保存すると、機能しません。「次のパーシスタがありません:System.Collections.Hashtable」というエラーが表示されます。私は今、それは一種の奇妙な要件ですが、誰かが私がそれを達成できる方法を知っていれば、私は感謝するでしょう。
Userテーブルの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>"