Ayendeからのリンクでは、彼は2つのデータベースを持つことを提唱していません。スキーマが拡張されて、エンティティに関する追加のメタデータを別のテーブルに格納できるようになるだけです。一部がNHibernateに、一部がRavenDBに移行する混合モードのDAレイヤーについて話している場合、分散トランザクション領域に入る可能性があります。これにより、スコープが大幅に拡大する可能性があります。
エンティティのテーブルに列を追加して、オブジェクトをそのテーブルにシリアル化できるようにすることも検討できます。たとえば、辞書の場合もあります(Jsonを使用することもできます)。後で複数のエンティティ間でクエリを実行する必要がない場合は、これで問題ありません。特定のエンティティを表示しているときにそのデータのみが必要な場合は、問題ありません。
私はこのアプローチを使用して、ユーザーの設定を保存しました。「設定カテゴリXの値がYであるすべてのユーザーを検索する」必要はありません。「ユーザーAのすべての設定のすべての値を教えてください」と言うだけです。
編集-XMLの保存
データベース内のシリアル化されたオブジェクトには、xmlデータ型を使用できます。以下のmsdnからのリンク:-SQLServerでの
XMLの実装
これは最大2GBになる可能性があるため、多くの動的な値を格納するためのスペースが不足しないようにする必要があります。このフィールドの流暢なマッピングは次のようになります。-
Map(x=>x.FieldForSerializedThing).CustomType("StringClob")
.Column("[FieldForSerializedThing]")
.Not.Nullable()
.Access.CamelCaseField(Prefix.Underscore);
エンティティには次のようなフィールドがあります:-
public virtual System.String FieldForSerializedThing
{
get { return _fieldForSerializedThing; }
set { _fieldForSerializedThing = value; }
}
シリアル化を行う方法は他にもあると思いますが、これで穴から抜け出すことができます(ちなみに上記の例はSQL Serverの場合です)。