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; } }
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); } }