コード例 #1
0
        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);
                }
            }
        }
コード例 #2
0
 public void MakePersistent(INakedObject nakedObject, IPersistedObjectAdder persistor) {
     if (nakedObject.Specification.IsCollection) {
         MakeCollectionPersistent(nakedObject, persistor);
     }
     else {
         MakeObjectPersistent(nakedObject, persistor);
     }
 }
コード例 #3
0
 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);
 }
コード例 #4
0
 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));
 }
コード例 #5
0
        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);
            }
        }