protected void Persist(INakedObject nakedObject, IPersistedObjectAdder persistor) { if (nakedObject.ResolveState.IsAggregated() || (nakedObject.ResolveState.IsTransient() && nakedObject.Specification.Persistable != Persistable.TRANSIENT)) { INakedObjectAssociation[] fields = nakedObject.Specification.Properties; if (!nakedObject.Specification.IsEncodeable && fields.Length > 0) { Log.Info("make persistent " + nakedObject); nakedObject.Persisting(); if (!nakedObject.Specification.ContainsFacet(typeof (IComplexTypeFacet))) { persistor.MadePersistent(nakedObject); } foreach (INakedObjectAssociation field in fields) { if (!field.IsPersisted) { continue; } if (field is IOneToManyAssociation) { INakedObject collection = field.GetNakedObject(nakedObject); if (collection == null) { throw new NotPersistableException("Collection " + field.Name + " does not exist in " + nakedObject.Specification.FullName); } MakePersistent(collection, persistor); } else { INakedObject fieldValue = field.GetNakedObject(nakedObject); if (fieldValue == null) { continue; } Persist(fieldValue, persistor); } } persistor.AddPersistedObject(nakedObject); } } }
public void MakePersistent(INakedObject nakedObject, IPersistedObjectAdder persistor) { if (nakedObject.Specification.IsCollection) { MakeCollectionPersistent(nakedObject, persistor); } else { MakeObjectPersistent(nakedObject, persistor); } }
public static void MakeObjectPersistent(INakedObject nakedObject, IPersistedObjectAdder persistor) { if (nakedObject.ResolveState.IsAggregated() || nakedObject.ResolveState.IsPersistent() || nakedObject.Specification.Persistable == Persistable.TRANSIENT || nakedObject.Specification.IsService) { return; } Log.Info("persist " + nakedObject); persistor.AddPersistedObject(nakedObject); }
private void MakeCollectionPersistent(INakedObject collection, IPersistedObjectAdder persistor) { if (collection.ResolveState.IsPersistent() || collection.Specification.Persistable == Persistable.TRANSIENT) { return; } Log.Info("persist " + collection); if (collection.ResolveState.IsTransient()) { collection.ResolveState.Handle(Events.StartResolvingEvent); collection.ResolveState.Handle(Events.EndResolvingEvent); } persistor.MadePersistent(collection); collection.GetAsEnumerable().ForEach(no => MakePersistent(no, persistor)); }
public virtual void MakePersistent(INakedObject nakedObject, IPersistedObjectAdder persistor) { if (nakedObject.Specification.IsCollection) { Log.Info("Persist " + nakedObject); nakedObject.GetAsEnumerable().ForEach(no => Persist(no, persistor)); if (nakedObject.ResolveState.IsGhost()) { nakedObject.ResolveState.Handle(Events.StartResolvingEvent); nakedObject.ResolveState.Handle(Events.EndResolvingEvent); } } else { if (nakedObject.ResolveState.IsPersistent()) { throw new NotPersistableException("can't make object persistent as it is already persistent: " + nakedObject); } if (nakedObject.Specification.Persistable == Persistable.TRANSIENT) { throw new NotPersistableException("can't make object persistent as it is not persistable: " + nakedObject); } Persist(nakedObject, persistor); } }