Отображение NHibernate по коду (Loquacious) - варианты каскада

У меня есть вопрос о поведении каскадных параметров перечисления при использовании NHibernate Mapping By Code.

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-сопоставлений: Графы Lifecycles и object

Может ли кто-нибудь описать каскадные параметры нового сопоставления Nhibernate кодом? Половина из них - самоописание, другая половина - нет.

Ответ 1

От 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.

Ответ 2

  • Нет: ничего не каскадов
  • Persist = ISession.SaveOrUpdate
  • Обновить = ISession.Refresh: загружает состояние db объекта в память и обновляет его свойства
  • Merge = ISession.Merge: загружает объект с тем же идентификатором из db и обновляет его свойства со свойствами данного экземпляра. возвращает загруженный объект
  • Удалить = ISession.Delete: удалить данный экземпляр в db и отсоединиться от сеанса
  • Отключить = ISession.Evict: удаляет объект из отслеживания сеанса/изменения
  • ReAttach = ISession.Lock(LockMode.None): повторно привязать данный немодифицированный экземпляр с сеансом
  • DeleteOrphans: удаление связанных объектов, на которые не ссылается родительский
  • Все: все вышележащие , кроме DeleteOrphans (спасибо to @Stefan Steinegger)