2013-01-21 71 views
10

當使用NHibernate映射代碼時,我對Cascade枚舉選項行爲有疑問。NHibernate通過代碼映射(Loquacious) - Cascade選項

枚舉有以下選項:

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

他們的目的是用於像位標誌組合(據我得到它)。

我已經看了直通NHibernate的文檔,以及XML映射下級聯選項的定義有:Lifecycles and object graphs

任何人都可以通過代碼描述來自新NHibernate的映射級聯選項?其中一半是自我描述,另一半則不是。

+0

哪些不是自我描述? – Firo

+0

我不確定。堅持=保存更新,刷新?合併?刪除=刪除,分離=?重新連接=? DeleteOrphans = delete-orphan,All = all。 – Cortlendt

+0

我同意,這個枚舉是一團糟,'所有'應該包括所有的按位標誌... – Lukazoid

回答

12

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

7
  • :什麼級聯
  • 堅持= ISession.SaveOrUpdate
  • 刷新= ISession.Refresh:加載對象的數據庫狀態到內存中,並更新其屬性
  • 合併= ISession.Merge:從數據庫加載具有相同Id的對象,並使用給定實例的屬性更新其屬性。返回加載的對象
  • 拆下= ISession.Delete:在分貝刪除給定的實例,並從會話分離
  • 拆離= ISession.Evict:從會話/更改跟蹤
  • 重新連接去除對象= ISession.Lock(LockMode.None):與會話
  • DeleteOrphans重新附加給定的未修改的實例:刪除未由父對象引用相關聯的對象
  • 所有:所有obove 的除了DeleteOrphans(感謝@Stefan Steinegger)
+0

這不完全正確。看到我的答案。 –

相關問題