12

NHibernate Mapping By Code を使用する場合の Cascade enum オプションの動作について質問があります。

Enum には次のオプションがあります。

[Flags]
public enum Cascade
{
    None = 0,
    Persist = 2,
    Refresh = 4,
    Merge = 8,
    Remove = 16,
    Detach = 32,
    ReAttach = 64,
    DeleteOrphans = 128,
    All = 256,
}

それらは、ビットフラグの組み合わせのように使用されることを意図しています(私が知る限り)。

NHibernate のドキュメントを調べたところ、XML マッピングの次のカスケード オプションが定義されています。ライフサイクルとオブジェクト グラフ

新しい Nhibernate マッピングのカスケード オプションをコードで説明できる人はいますか? それらの半分は自己記述的で、残りの半分はそうではありません。

4

2 に答える 2

15

からsrc\NHibernate\Mapping\ByCode\Impl\CascadeConverter.cs

    private static IEnumerable<string> CascadeDefinitions(this Cascade source)
    {
        if (source.Has(Cascade.All))
        {
            yield return "all";
        }
        if (source.Has(Cascade.Persist))
        {
            yield return "save-update, persist";
        }
        if (source.Has(Cascade.Refresh))
        {
            yield return "refresh";
        }
        if (source.Has(Cascade.Merge))
        {
            yield return "merge";
        }
        if (source.Has(Cascade.Remove))
        {
            yield return "delete";
        }
        if (source.Has(Cascade.Detach))
        {
            yield return "evict";
        }
        if (source.Has(Cascade.ReAttach))
        {
            yield return "lock";
        }
        if (source.Has(Cascade.DeleteOrphans))
        {
            yield return "delete-orphan";
        }
    }

注:allを除くすべてをカスケードしdelete-orphanます。

于 2013-01-22T13:55:22.823 に答える
7
  • None : 何もカスケードしません
  • Persist = ISession.SaveOrUpdate
  • Refresh = ISession.Refresh : オブジェクトのデータベース状態をメモリにロードし、そのプロパティを更新します
  • Merge = ISession.Merge : db から同じ ID を持つオブジェクトをロードし、そのプロパティを指定されたインスタンスのプロパティで更新します。ロードされたオブジェクトを返します
  • Remove = ISession.Delete : データベース内の指定されたインスタンスを削除し、セッションから切り離します
  • Detach = ISession.Evict : セッション/変更追跡からオブジェクトを削除します
  • ReAttach = ISession.Lock(LockMode.None) : 指定された変更されていないインスタンスをセッションに再接続します
  • DeleteOrphans : 親によって参照されていない関連オブジェクトを削除します
  • All : DeleteOrphansを除くすべての obove (thx to @Stefan Steinegger)
于 2013-01-22T13:33:48.917 に答える