问题
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