private void Persist(INakedObjectAdapter nakedObjectAdapter) { if (nakedObjectAdapter.ResolveState.IsAggregated() || (nakedObjectAdapter.ResolveState.IsTransient() && nakedObjectAdapter.Spec.Persistable != PersistableType.Transient)) { IAssociationSpec[] fields = ((IObjectSpec) nakedObjectAdapter.Spec).Properties; if (!nakedObjectAdapter.Spec.IsEncodeable && fields.Length > 0) { Log.Info("make persistent " + nakedObjectAdapter); nakedObjectAdapter.Persisting(); if (!nakedObjectAdapter.Spec.ContainsFacet(typeof (IComplexTypeFacet))) { manager.MadePersistent(nakedObjectAdapter); } foreach (IAssociationSpec field in fields) { if (!field.IsPersisted) { continue; } if (field is IOneToManyAssociationSpec) { INakedObjectAdapter collection = field.GetNakedObject(nakedObjectAdapter); if (collection == null) { throw new NotPersistableException("Collection " + field.Name + " does not exist in " + nakedObjectAdapter.Spec.FullName); } MakePersistent(collection); } else { INakedObjectAdapter fieldValue = field.GetNakedObject(nakedObjectAdapter); if (fieldValue == null) { continue; } Persist(fieldValue); } } persistor.AddPersistedObject(nakedObjectAdapter); } } }
private void Persist(INakedObjectAdapter nakedObjectAdapter) { if (nakedObjectAdapter.ResolveState.IsAggregated() || nakedObjectAdapter.ResolveState.IsTransient() && nakedObjectAdapter.Spec.Persistable != PersistableType.Transient) { var fields = ((IObjectSpec)nakedObjectAdapter.Spec).Properties; if (!nakedObjectAdapter.Spec.IsEncodeable && fields.Length > 0) { nakedObjectAdapter.Persisting(); if (!nakedObjectAdapter.Spec.ContainsFacet(typeof(IComplexTypeFacet))) { manager.MadePersistent(nakedObjectAdapter); } foreach (var field in fields) { if (!field.IsPersisted) { continue; } if (field is IOneToManyAssociationSpec) { var collection = field.GetNakedObject(nakedObjectAdapter); if (collection == null) { throw new NotPersistableException(logger.LogAndReturn($"Collection {field.Name} does not exist in {nakedObjectAdapter.Spec.FullName}")); } MakePersistent(collection); } else { var fieldValue = field.GetNakedObject(nakedObjectAdapter); if (fieldValue == null) { continue; } Persist(fieldValue); } } persistor.AddPersistedObject(nakedObjectAdapter); } } }