private void Serialize(Stream stream, IEnumerable <IModelEntity> entities, IEnumerable <IModelRelationship> relationships, HashSet <Identity> deletedEntities = null, HashSet <Identity> deletedRelationShips = null)
        {
            ISession session = null;

            if (Session.Current != null)
            {
                Session.Current.SetMode(SessionMode.Serializing);
            }
            else
            {
                IHyperstore          store = _domain.Store;
                SessionConfiguration sessionConfiguration = new SessionConfiguration();
                sessionConfiguration.Mode = SessionMode.Serializing;
                session = store.BeginSession(sessionConfiguration);
            }

            try
            {
                _monikers = new Dictionary <Identity, MonikerEntry>();
                SerializeEntities(entities, deletedEntities);
                SerializeRelationships(relationships, deletedRelationShips);
                _writer.Save(stream, _monikers.Values);
            }
            finally
            {
                if (session != null)
                {
                    session.AcceptChanges();
                    session.Dispose();
                }
                _monikers        = null;
                _monikerSequence = 0;
            }
        }
Exemple #2
0
        private ISessionResult CheckOrValidateElements(IEnumerable <IModelElement> elements, ConstraintKind kind, string category)
        {
            if (!elements.Any())
            {
                return(ExecutionResult.Empty);
            }

            var categoryTitle = category ?? (kind == ConstraintKind.Check ? "CheckConstraints" : "ValidationConstraints");

            using (CodeMarker.MarkBlock("ConstraintsManager." + categoryTitle))
            {
                ISession session = null;
                if (Session.Current == null)
                {
                    session = Domain.Store.BeginSession(new SessionConfiguration {
                        Readonly = true
                    });
                }

                var ctx = new ConstraintContext(((ISessionInternal)Session.Current).SessionContext, categoryTitle, kind);
                try
                {
                    foreach (var mel in elements)
                    {
                        ctx.Element = mel;
                        var schema = mel.SchemaInfo;
                        try
                        {
                            if (kind == ConstraintKind.Check)
                            {
                                CheckElement(ctx, mel, schema);
                            }
                            else
                            {
                                ValidateElement(ctx, mel, schema, category);
                            }
                        }
                        catch (Exception ex)
                        {
                            ((ISessionInternal)session).SessionContext.Log(new DiagnosticMessage(MessageType.Error, ex.Message, categoryTitle, false, mel));
                        }
                    }
                }
                finally
                {
                    if (session != null)
                    {
                        session.AcceptChanges();
                        session.Dispose();
                    }
                }

                return(ctx.Messages);
            }
        }