これが私の基本的な状況です。NHibernate を使用して、データベースから情報を取得し、マッピングに基づいていくつかのオブジェクトを作成し、それらをシリアル化し、シリアル化されたオブジェクトをフラッシュ コンポーネントに移動しようとしています。ビルド エラーは発生していませんが、「シリアル化された」オブジェクトを返すと、null が返され続けます。いくつかのブレークポイントを挿入してステップスルーすると、すべてが南に向かっていることに気付きました。
ここにブレークポイントを置きます:
var tasks = (List<CSH_Task>)persistanceManager.RetrieveAll<CSH_Task>(SessionAction.BeginAndEnd);
そして、PersistanceManager クラスに入り、CSH_Task を正常に渡します。
public IList<T> RetrieveAll<T>(SessionAction sessionAction)
{
/* Note that NHibernate guarantees that two object references will point to the
* same object only if the references are set in the same session. For example,
* Order #123 under the Customer object Able Inc and Order #123 in the Orders
* list will point to the same object only if we load Customers and Orders in
* the same session. If we load them in different sessions, then changes that
* we make to Able Inc's Order #123 will not be reflected in Order #123 in the
* Orders list, since the references point to different objects. That's why we
* maintain a session as a member variable, instead of as a local variable. */
// Open a new session if specified
if ((sessionAction == SessionAction.Begin) || (sessionAction == SessionAction.BeginAndEnd))
{
m_Session = m_SessionFactory.OpenSession();
}
// Retrieve all objects of the type passed in
ICriteria targetObjects = m_Session.CreateCriteria(typeof(T));
IList<T> itemList = targetObjects.List<T>();
// Close the session if specified
if ((sessionAction == SessionAction.End) || (sessionAction == SessionAction.BeginAndEnd))
{
m_Session.Close();
m_Session.Dispose();
}
// Set return value
return itemList;
}
これは、NHibernateの古い例から直接引用したものです (私は非常に新しいものです)。そして、これを一覧表示する「利用可能なソースがありません」ページに移動します。
コール スタックの場所:
Iesi.Collections.DLL!Iesi.Collections.Generic.HashedSet.HashedSet() 18 行目
ソースファイル情報:
「d:\CSharp\NH\NH_Hg\nhibernate\src\Iesi.Collections\Generic\HashedSet.cs」のソースを検索しています。チェックサム: MD5 {d3 1c 6c 95 94 c0 cb d4 b5 8d 8c 42 c5 4a 37 b2}
ファイル 'd:\CSharp\NH\NH_Hg\nhibernate\src\Iesi.Collections\Generic\HashedSet.cs' は存在しません。
「d:\CSharp\NH\NH_Hg\nhibernate\src\Iesi.Collections\Generic\HashedSet.cs」のスクリプト ドキュメントを検索しています...
プロジェクトで「d:\CSharp\NH\NH_Hg\nhibernate\src\Iesi.Collections\Generic\HashedSet.cs」を探します。
プロジェクト内にファイルが見つかりませんでした。
ディレクトリ 'C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\crt\src\' を探しています...
ディレクトリ 'C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\src\mfc\' を探しています...
ディレクトリ 'C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\src\atl\' を探しています...
ディレクトリ 'C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\include\' を探しています... ディレクトリ 'C:\Users\tackiean\Desktop\' を探しています...
ディレクトリ 'E:\SmartMC\NHibernate\Required_Bins\' を探しています...
ソースは「E:\SmartMC\NHibernate\Required_Bins\HashedSet.cs」で見つかりました。
次の場所のチェックサムが一致するかどうかを判断します。
1:E:\SmartMC\NHibernate\Required_Bins\HashedSet.cs チェックサム: MD5 {40 1b 39 7e 8f 4a 3f 6 11 41 88 70 9e 8f 8 f1} チェックサムが一致しません。
アクティブなソリューションのデバッグ ソース ファイルの設定は、デバッガーがユーザーにファイルの検索を要求しないことを示しています: d:\CSharp\NH\NH_Hg\nhibernate\src\Iesi.Collections\Generic\HashedSet.cs。
デバッガーは、ソース ファイル 'd:\CSharp\NH\NH_Hg\nhibernate\src\Iesi.Collections\Generic\HashedSet.cs' を見つけることができませんでした。
ステップを進めていくと、コードに戻ります。ここに戻ると、DictionarySet.cs に関するほぼ同じメッセージが表示されます。
そもそもこのマシンでこのプロジェクト用に NHibernate をダウンロードしたのは私ではありませんが、HashedSet.cs/DictionarySet.cs が機能するために必要な場合、デフォルトで含まれているはずだと想像していました。私は今日、これに対する答えを探すのに約 7 時間費やしましたが、何も出てきません。このようなエラーは今まで見たことがありません。NHibernate が必要としていて見つからないファイルを探しているだけだと思いますが、ここで何か他のことが起こっていますか? どんな助けでも大歓迎です。これが適切な場所/読みやすい形式であることを願っています。ここで質問したことがないので、完全に不適切でないことを願っています。