Fluent NHibernate と自動マッピングで c# を使用しています。
ここにいくつかのコードがあります (わかりやすくするために切り捨てられています)。次に、問題を説明します。
public class Company
{
public virtual string Description { get; set; }
}
public class Stock
{
public virtual Product Product { get; set; }
public virtual Company Company { get; set; }
}
マッピング
mappings.Conventions.Add<CascadeConvention>()
.Conventions.Add<CustomForeignKeyConvention>()
.Conventions.Add<HasManyConvention>()
.Conventions.Add<VersionConvention>()
CascadeConvention
すべてを All に設定するだけです。CustomForeignKeyConvention
NHibernate が通常外部キー ID 列に追加する _id を削除します。HasManyConvention
すべてHasMany
の を逆に設定します。VersionConvention
変換は次のようになります。instance.Column("バージョン");
インスタンス。デフォルト(1);
問題は、新しい株式レコードを挿入すると、Nhibernate が関連のバージョン番号も更新することCompany
です。IList<Stock>
にプロパティがあれば、Company
それは理にかなっていますが、そうではありません。
私はたくさんの読書をしました:
- リレーションの適切な逆 (流暢な nhibernate) 設定に関係なく、無関係な更新ステートメントを発行する NHibernate
- NHibernate とバージョン列での保存と更新のカスケード
- NHibernate リファレンス - 第 17 章 例: 親/子
- Ayende @ Rahien - NHibernate マッピング
これらから、あちこちに追加するなど、たくさんのことを試しました.Not.OptimisticLock()
。、などとして具体的に設定できるように、IList<Stock>
プロパティを追加しました。何も違いはないようです。Company
Inverse
Not.OptimisticLock