Отображение 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)