public InMemoryEntityRevision(InMemoryEntity inMemoryEntity, InMemoryEntityRevision previous, Dictionary <string, object> properties) { this.inMemoryEntity = inMemoryEntity; this.previous = previous; this.properties = properties; Writable = true; }
private InMemoryEntity Save(Abstract1CEntity entity, bool isTableSection) { if (entity == null) { return(null); } var changed = entity.Controller.Changed; if (changed != null) { var keys = changed.Keys.ToArray(); foreach (var k in keys) { var abstract1CEntity = changed[k] as Abstract1CEntity; if (abstract1CEntity != null) { changed[k] = Save(abstract1CEntity, false); continue; } var list = changed[k] as IList; if (list != null) { changed[k] = ConvertList(list); continue; } var syncList = changed[k] as SyncList; if (syncList != null) { changed[k] = ConvertList(syncList.Current); } } } InMemoryEntity inMemoryEntity; if (!entity.Controller.IsNew) { var inmemoryEntityRevision = (InMemoryEntityRevision)entity.Controller.ValueSource; inMemoryEntity = inmemoryEntityRevision.inMemoryEntity; if (changed != null) { inMemoryEntity.revision = new InMemoryEntityRevision(inMemoryEntity, inmemoryEntityRevision, changed); Collection(entity.GetType()).revision++; } } else { if (changed == null) { changed = new Dictionary <string, object>(); } inMemoryEntity = new InMemoryEntity(); var revision = new InMemoryEntityRevision(inMemoryEntity, null, changed); inMemoryEntity.entityType = entity.GetType(); inMemoryEntity.revision = revision; if (!isTableSection) { var configurationName = ConfigurationName.Get(entity.GetType()); if (configurationName.Scope == ConfigurationScope.Справочники) { AssignNewGuid(entity, changed, "Код"); } else if (configurationName.Scope == ConfigurationScope.Документы) { AssignNewGuid(entity, changed, "Номер"); } if (entity.Controller.IsNew && configurationName.HasReference) { var idProperty = entity.GetType().GetProperty(EntityHelpers.idPropertyName); if (idProperty == null) { throw new InvalidOperationException("assertion failure"); } AssignValue(entity, changed, idProperty, Guid.NewGuid()); } var inMemoryEntityCollection = Collection(entity.GetType()); inMemoryEntityCollection.revision++; inMemoryEntityCollection.list.Add(inMemoryEntity); } } entity.Controller.ResetDirty(inMemoryEntity.revision); return(inMemoryEntity); }