2

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 に設定するだけです。
  • CustomForeignKeyConventionNHibernate が通常外部キー ID 列に追加する _id を削除します。
  • HasManyConventionすべてHasManyの を逆に設定します。
  • VersionConvention変換は次のようになります。

    instance.Column("バージョン");

    インスタンス。デフォルト(1);

問題は、新しい株式レコードを挿入すると、Nhibernate が関連のバージョン番号も更新することCompanyです。IList<Stock>にプロパティがあれば、Companyそれは理にかなっていますが、そうではありません。

私はたくさんの読書をしました:

これらから、あちこちに追加するなど、たくさんのことを試しました.Not.OptimisticLock()。、などとして具体的に設定できるように、IList<Stock>プロパティを追加しました。何も違いはないようです。CompanyInverseNot.OptimisticLock

4

1 に答える 1

0

最終的に、リクエストごとのセッション パラダイムに移行することで、これを整理しました。なぜうまくいかなかったのか、なぜこれで修正されたのかわかりません。より制御された環境で動作を再現するために、多数の単体テストを作成しましたが、成功しませんでした。

いずれにせよ、それは今動作します。Web アプリケーションで NHibernate セッションを管理するためのベスト プラクティスとして、リクエストごとのセッションがしばしば与えられるのには十分な理由があります。

于 2013-07-05T08:38:11.250 に答える