問題タブ [nhibernate-caches]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
nhibernate - 2 番目のレベルのキャッシュを持つ NHibernate がプロパティを復元しない
Nhibernate での二次キャッシュの実装に問題があります。次のようにマップされたクラスがあります。
プロパティ "ClientID" は Clients テーブルへの外部キーであり、多対 1 のクライアント プロパティはそれを使用して、関連するクライアント オブジェクトを検索します。
新しい Account を追加するときは、Session.Get を使用してデータベースから Client オブジェクトを検索し、それを Account オブジェクトの Client プロパティに割り当てます。バックグラウンドでは、オブジェクトがデータベースに書き込まれるときに ClientID プロパティも自動的に設定され、ID がデータベースに正しく格納されます。Session.Get を使用して ID でデータベースから Account オブジェクトを取得すると、オブジェクトの取得時にすべてのフィールドが正しく入力されます。
ただし、上記の設定を使用して第 2 レベルのキャッシュを実装すると、Session.Get を使用して Account オブジェクトを取得するときに ClientID プロパティは設定されませんが、Client プロパティは正しく設定されます。これが二次キャッシュで機能しない理由はありますか? または、マッピング/構成で何か間違ったことをしましたか?
今のところ、キャッシュ プロバイダーとして SysCache を使用しているだけで、クエリと 2 次キャッシュの両方がオンになっています。クライアント クラス マッピングには、アカウントの対応する 1 対多のプロパティが含まれています。
Account クラスに ClientID プロパティがあると便利なので、Client プロパティを使用せずに読み取ることができ、キャッシュしなくても問題なく動作するようです。
助けてくれてありがとう。
リッチ
c# - 動的更新または挿入を使用するときにNHibernateがプロパティを常にダーティと見なすようにするにはどうすればよいですか?
しばらくの間私を悩ませてきたNHibernateの問題について助けを求めています。短編小説:
更新または挿入を行うたびに、第1レベルのキャッシュでエンティティのプロパティを「リセット」する方法を探しています。
私が達成したいのは、動的更新または挿入を使用する場合、問題のプロパティはNHibernateによって常にダーティであると見なされることです。
これの裏話は、トランザクションが成功した場合、「リセット」したい列がトリガーによってデータベースでNullに設定されることを知っていることです。反対に、第1レベルのキャッシュはこれを認識しないため、NHibernateは、前回の更新/挿入で行ったのと同じ値に設定したときに、プロパティが更新されなかったと見なします。キャッチは、私のトリガーが設定されているこの値に依存していることです。結果として生じる混乱は、動的更新または挿入を使用したい場合、後でエンティティを「更新」せずにエンティティを更新/挿入できるのは1回だけであるということです(これは本当にやりたくないです)。
私は本当にここで壁にぶつかったので、ヒントや助けをいただければ幸いです
nhibernate - 流暢な nhibernate の第 1 レベルのキャッシュが期待どおりに機能しない
1 つのセッションで何度も呼び出される関数があります。NHibernate の第 1 レベル キャッシュに関する私の理解では、呼び出し回数に関係なく、同じセッション内の正確なクエリは 1 回だけ実行されます。
しかし、そうではありません。以下はスニペットで、関数が呼び出されるたびに NHProfiler でクエリが実行されていることがわかります。
ここでNHibernateを理解するのに何か欠けていますか?
ありがとう
nhibernate - モデルがセッションで失敗したトランザクションの一部である場合、NHibernate はそのセッションにモデルを挿入できません
初めてモデルを挿入しようとしたときにデータベースからエラーが返された後、モデルを挿入できないのはなぜですか。
しかし、既存のモデルを更新しているときにエラーが発生した場合は、修正を行い (この場合は名前を設定)、更新を再試行することができます。
nhibernate - NHibernate -- コレクション キャッシュを使用すると結果が重複する
双方向の親子 (-孫) 1 対多の関係の複数のレイヤーで第 2 レベルのキャッシュを使用すると、NHibernate から非常に奇妙な動作が発生します。
2 人の孫を持つ 2 番目の子は、コレクション内で複製されますが、オブジェクト ID は同じです ( ReferenceEquals()
is true
)。コレクションのキャッシュを無効にするParent.Children
か、フェッチ戦略を に設定するJoin
と、問題は解決します。ここで何が起こっているのかを知る方法はありますか?
エンティティ:
マッピング:
[編集]
子コレクションのキャッシュを有効にしないことで、この問題を回避しました。fetch join
キャッシュされたエンティティの子に対するクエリでN+1 選択の問題を回避するために最初に行ったので、代わりに次のことを行いました。
私はまだここで何が起こっているのか理解していないので、この問題についての洞察は大歓迎です:-)。
nhibernate - NHibernate MemCached with Protobuf-net.Enyim -- 実際に動作しますか?
Protobuf-net バイナリ シリアライザーを使用して、NHibernate の第 2 レベルのキャッシュを Enyim Memcached に接続するために、次のアセンブリを使用しました。
- NHibernate
- NHibernate.Caches.EnyimMemcached
- Enyim.Caching
- プロトブフネット
- protobuf-net.Enyim
最近、protobuf-net を EnyimMemcached に接続しているにもかかわらず、実際にはそのシリアライザーを使用していない可能性が高いことに気付きました。これは、すべてのエンティティが、プロパティに対応する順序付けられた Data/ProtoMembersのみでマークされているか[Serializable]
、どちらもマークされていないためです。適切な属性を追加した後 (または protobuf-net の RuntimeTypeModel.Default クラスに手動で登録した後)、memcache を直接操作すると、protobuf-net を EnyimMemcached と連携させることができます。[DataContract]
[ProtoContract]
ただし、型を protobuf-net に登録してデューデリジェンスを行ったとしても、NHibernate.Caches.EnyimMemcached 内のキャッシュにエントリを格納するため、NHibernate からのキャッシュエントリが実際に protobuf-net によってシリアル化されるとは思いません。DictionaryEntry
オブジェクト:
DictionaryEntry
[DataContract]
と の[DataMember(Order = xx)]
属性はありません。これは私が不思議に思う...
NHibernate の第 2 レベルのキャッシュに protobuf-net シリアライザーを適切に利用することはできますか?
.net - キャッシュ クラスターに障害が発生した場合、AppFabric NHibernate プロバイダーが要求を DB に転送しない
NHibernate AppFabric Cache Provider (By Simon Taylor )を使用して、第 2 レベルのキャッシュ用にAppFabricをセットアップする割り当てを与えました。セットアップに成功し、動作しています。ただし、障害のシナリオでは、キャッシュ クラスターまたは単にサービス全体が機能しなくなった場合 (キャッシュ サーバーが 1 つしかない場合)、アプリケーションの要求はデータベースに転送されません。クラスターを再起動すると、アプリケーションは意図したとおりに動作します。
では、キャッシュ サーバーが 1 つだけというのは現実的ではありませんが、このような障害が発生した場合にアプリケーションで DB を使用するにはどうすればよいでしょうか。
どんな提案でも大歓迎です。
nhibernate - NHibernate.Caches.AppFabric nuget パッケージが Azure AppFabric Caching Service との接続を確立できない
NHibernate の 2 次キャッシュとして Azure AppFabric キャッシュ サービスを使用するための NHibernate.Caches.Appfabric nuget パッケージは、Azure SDK の V 1.8 で正常に動作していました。
ただし、VS 2012 および Azure SDK のバージョン 2.0 にアップグレードした後、nuget パッケージは動作を停止し、AppFabric DLL は Azure AppFabric キャッシュ サービスとの接続を確立できません。Azure AppFabric キャッシュ サービスに接続すると、次のエラーが発生します。
Microsoft.ApplicationServer.Caching.DataCache.ThrowException (ErrStatus errStatus、Guid trackingId、例外 responseException、Byte[][] ペイロード、EndpointID 宛先) で Microsoft.ApplicationServer.Caching.DataCacheFactory.EstablishConnection (IEnumerable 1 servers, RequestBody request, Func
3 sendMessageDelegate、DataCacheReadyRetryPolicy retryPolicy) で Microsoft .ApplicationServer.Caching.SocketClientProtocol.Initialize(IEnumerable 1 servers)
at Microsoft.ApplicationServer.Caching.DataCacheFactory.GetCache(String cacheName, CreateNewCacheDelegate cacheCreationDelegate, DataCacheInitializationViaCopyDelegate initializeDelegate)
at NHibernate.Caches.AppFabric.AppFabricCacheFactory.GetCache(String cacheName, Boolean useDefault)
at NHibernate.Caches.AppFabric.Adapters.AppFabricCacheNamedAdapter.GetCache(IAppFabricCacheFactory cacheFactory)
at NHibernate.Caches.AppFabric.AppFabricCacheAdapter..ctor(String regionName)
at NHibernate.Caches.AppFabric.Adapters.AppFabricCacheNamedAdapter..ctor(String regionName)
at NHibernate.Caches.AppFabric.AppFabricCacheAdapterFactory.Create(String regionName)
at NHibernate.Caches.AppFabric.AppFabricProvider.BuildCache(String regionName, IDictionary
2 プロパティ) at NHibernate.Cache.CacheFactory.CreateCache(String usage, String name, Boolean mutable, Settings settings, IDictionary`2 properties) at NHibernate.Impl.SessionFactoryImpl..ctor(Configuration) cfg、IMapping マッピング、設定設定、EventListeners リスナー)
================================================== ===
この問題を解決する方法を提案できますか??
ありがとう
c# - AliasesToBean トランスフォーマーを使用した Nhibernate の第 2 レベルのキャッシュ
私はエンティティを持っています:
関連する Dto:
私は非常に単純なクエリを持っています:
二次キャッシュを接続するまでは機能していました。したがって、Cacheable()
行のコメントを外すと、例外が発生します。
メッセージ: 値を null にすることはできません。パラメータ名: エイリアス StackTrace:
それで、それの何が問題なのですか?NHibernate のバグですか?さまざまなプロバイダーを試しましたが、役に立ちませんでした。また、次のように CacheableResultTransformer を作成しようとしました:
データを返してキャッシュできますが、タプル (object[]) としてのみです。Dtoを返すことができませんでした。
問題を示す実際の例を次に示します: github