12

我对使用 NHibernate Mapping By Code 时的级联枚举选项行为有疑问。

枚举有以下选项:

[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
  • :没有级联
  • 坚持 = ISession.SaveOrUpdate
  • Refresh = ISession.Refresh:将对象的 db 状态加载到内存中并更新其属性
  • Merge = ISession.Merge:从 db 加载具有相同 Id 的对象,并使用给定实例的属性更新其属性。返回加载的对象
  • Remove = ISession.Delete:删除数据库中的给定实例并从会话中分离
  • Detach = ISession.Evict:从会话/更改跟踪中删除对象
  • ReAttach = ISession.Lock(LockMode.None):将给定的未修改实例重新附加到会话中
  • DeleteOrphans : 删除没有被父对象引用的关联对象
  • 全部除 DeleteOrphans 之外的所有上述内容(感谢@Stefan Steinegger)
于 2013-01-22T13:33:48.917 回答