NHibernate mapping by code (Loquacious) - Cascade options

夙愿已清 提交于 2019-11-30 02:37:51

问题


I have a question on Cascade enum options behavior when using NHibernate Mapping By Code.

Enum has following options:

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

They are intended to be used like bit flag combinations (as far as I get it).

I've looked thru NHibernate documentation, and the following cascade options for XML mappings are defined there: Lifecycles and object graphs

Can anyone describe cascade options from new Nhibernate mapping by code? Half of them are self describing, other half is not.


回答1:


From 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";
        }
    }

Note: all cascades all except of delete-orphan.




回答2:


  • None: nothing cascades
  • Persist = ISession.SaveOrUpdate
  • Refresh = ISession.Refresh: loads the db state of the object into memory and updates its properties
  • Merge = ISession.Merge: loads the object with the same Id from db and updates its properties with the properties of the given instance. returns the loaded object
  • Remove = ISession.Delete: delete the given instance in db and detach from session
  • Detach = ISession.Evict: removes the object from the session/change tracking
  • ReAttach = ISession.Lock(LockMode.None): reattach the given unmodified instance with the session
  • DeleteOrphans: delete associated objects which are not referenced by the parent
  • All: all of the obove except DeleteOrphans (thx to @Stefan Steinegger)


来源:https://stackoverflow.com/questions/14438564/nhibernate-mapping-by-code-loquacious-cascade-options

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!