2

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オブジェクト:

bool returnOk = client.Store(
    StoreMode.Set, KeyAsString(key),
    new DictionaryEntry(GetAlternateKeyHash(key), value),
    TimeSpan.FromSeconds(expiry));

DictionaryEntry[DataContract]と の[DataMember(Order = xx)]属性はありません。これは私が不思議に思う...

NHibernate の第 2 レベルのキャッシュに protobuf-net シリアライザーを適切に利用することはできますか?

4

1 に答える 1