2011-01-10 7 views
2

DB(およびS3)の代わりにエンティティ内のバイト配列またはストリームをトランスペアレントにディスクに保存できますか?もちろん、プロパティが要求されたときにそれを読んでコース)、私は類似の何かを行うドキュメントや例を見つけることができません。出来ますか?これがどのように実施されるかについてのヒント? IUserType? IEntityPersister?NHibernateがファイルシステムまたはS3にトランスペアレントにバイト配列を格納させるようにしてください。

答えて

2

threadをチェックしてください。

IUserTypeおよび/またはIEntityPersisterは、ロード/挿入/更新/削除時にエンティティの一部またはエンティティ全体を処理する方法を定義します。

あなたの場合は、より低いレベルのORM抽象化を定義する必要があります.HTibernate.Dialect.Dialect、NHibernate.Connection.IConnectionProvider、およびNHibernate.Driver.IDriverの実装を記述する必要があります。その後、NHibernateオブジェクトを永続化する完全な制御ができます。

あなたのニーズがはるかに単純で、データをデータベースに保存しながらディスクに保存するだけであれば、NHibernateロード/セーブプロセスにリスナーを追加することができます。名前空間NHibernate.Event(IAutoFlushEventListener、IMergeEventListener、IPersistEventListenerなど)を確認します。使用例はhereです。

0

blobのキーをデータベースに格納し、このキーを使用してユーザータイプがデータベースから読み取られたときにblobを取得すると、IUserTypeを使用することができます。しかし、データベースとBLOBストレージ全体のトランザクション管理が問題になります。

(N)Hibernateのこの拡張性メカニズムのドキュメントは素晴らしいものではないため、Entity Persisterは多くの仕事を書くことができます。それらはリレーショナルデータベースに非常に適していますが、他のストレージメカニズムにアクセスするために使用できます。

実際にイベントトリガーを使用すると、最適なオプションが提供される可能性があります。それらは、エンティティのライフサイクルイベントおよびそれらが発生するトランザクションに対して、きれいでコンパクトなインタフェースを提供します。

関連する問題