public void Delete() { TestObjClass obj = ctx.GetQuery <TestObjClass>().First(); Assert.That(obj.ObjectState, Is.EqualTo(DataObjectState.Unmodified)); ctx.Delete(obj); Assert.That(obj.ObjectState, Is.EqualTo(DataObjectState.Deleted)); }
/// <summary> /// Deletes all remaining test objects. /// </summary> /// <param name="ctx">this context is used to delete the objects</param> public static void DeleteData(IZetboxContext ctx) { ctx.GetQuery <Kunde>().ForEach(obj => ctx.Delete(obj)); ctx.GetQuery <Auftrag>().ForEach(obj => ctx.Delete(obj)); ctx.GetQuery <Task>().ForEach(obj => ctx.Delete(obj)); ctx.GetQuery <Projekt>().ForEach(obj => { ctx.Delete(obj); }); ctx.GetQuery <Mitarbeiter>().ForEach(obj => { ctx.Delete(obj); }); }
private void DeleteObjects() { using (IZetboxContext ctx = GetContext()) { // TODO: remove obj.Mitarbeiter.Clear() after fixing Case 1369 and marking the Mitarbeiter RelationEnd properly ctx.GetQuery <Projekt>().ForEach(obj => { obj.Mitarbeiter.Clear(); ctx.Delete(obj); }); ctx.GetQuery <Task>().ForEach(obj => ctx.Delete(obj)); ctx.SubmitChanges(); } }
public void should_remove_n_m() { ctx.Delete(a1); ctx.Delete(b1); ctx.Delete(b2); Assert.That(a1.ObjectState, Is.EqualTo(DataObjectState.Deleted)); Assert.That(b1.ObjectState, Is.EqualTo(DataObjectState.Deleted)); Assert.That(b2.ObjectState, Is.EqualTo(DataObjectState.Deleted)); ctx.SubmitChanges(); }
public void when_deleting_items() { aSide1.BSide.Add(bSide1); SubmitAndReload(); // TODO: remove this after case 2115 is fixed aSide1.BSide.Clear(); ctx.Delete(aSide1); ctx.Delete(bSide1); ctx.SubmitChanges(); }
public void Clear() { var entries = collection.ToList(); foreach (var e in entries) { ctx.Delete(e); OnEntryRemoving(e); } collection.Clear(); foreach (var e in entries) { OnEntryRemoved(e); } }
private static void MakeInternal(IZetboxContext ctx, ImportedFile obj, File doc) { // Clone blob, so it could be deleted doc.Blob = ctx.Find <Blob>(ctx.CreateBlob(ctx.GetFileInfo(obj.Blob.ID), obj.Blob.MimeType)); doc.Name = obj.Name; ctx.Delete(obj); }
private static void MakeInternal(IZetboxContext ctx, ImportedFile obj, File doc) { // Clone blob, so it could be deleted doc.Blob = ctx.Find<Blob>(ctx.CreateBlob(ctx.GetFileInfo(obj.Blob.ID), obj.Blob.MimeType)); doc.Name = obj.Name; ctx.Delete(obj); }
public void should_delete_all_objects_same_ctx() { ctx.Delete(one); ctx.Delete(n1); ctx.Delete(n2); Assert.That(one.ObjectState, Is.EqualTo(DataObjectState.Deleted)); Assert.That(n1.ObjectState, Is.EqualTo(DataObjectState.Deleted)); Assert.That(n2.ObjectState, Is.EqualTo(DataObjectState.Deleted)); ctx.SubmitChanges(); Assert.That(ctx.AttachedObjects, Is.Empty); }
protected virtual void DeleteTestData() { using (IZetboxContext ctx = GetContext()) { ctx.GetQuery <TestCustomObject>().ForEach(obj => ctx.Delete(obj)); ctx.SubmitChanges(); } }
public override void TearDown() { ctx = GetContext(); var tdObj = ctx.GetQuery<TestObjClass>().Where(a => a.ID == originalId); foreach (var o in tdObj.ToList()) { ctx.Delete(o); } base.TearDown(); }
protected virtual void DeleteTestData() { using (IZetboxContext ctx = GetContext()) { ctx.GetQuery <at.dasz.DocumentManagement.Document>().ForEach(obj => obj.Revisions.Clear()); ctx.GetQuery <at.dasz.DocumentManagement.File>().ForEach(obj => ctx.Delete(obj)); // Can't delete all blobs - icons are using them // ctx.GetQuery<Zetbox.App.Base.Blob>().ForEach(obj => ctx.Delete(obj)); ctx.SubmitChanges(); } }
public void Delete_triggers_ObjectDeleted() { using (IZetboxContext ctx = GetContext()) { bool hasDeleted = false; GenericEventHandler <IPersistenceObject> deletedHandler = new GenericEventHandler <IPersistenceObject>( delegate(object obj, GenericEventArgs <IPersistenceObject> e) { hasDeleted = true; }); ctx.ObjectDeleted += deletedHandler; var result = ctx.GetQuery <TestObjClass>(); Assert.That(result.ToList().Count, Is.GreaterThan(0)); result.ForEach <TestObjClass>( o => ctx.Delete(o)); Assert.That(hasDeleted, Is.True); ctx.ObjectDeleted -= deletedHandler; ctx.SubmitChanges(); } }
private void DoDelete(IZetboxContext ctx, IDataObject obj) { var deactivatable = obj as IDeactivatable; if (deactivatable == null || (ctx.IsElevatedMode && ViewModelFactory.GetDecisionFromUser(CommonCommandsResources.DeleteDataObjectCommand_ElevatedDeleteDeactivated, CommonCommandsResources.DeleteDataObjectCommand_ElevatedDeleteDeactivated_Title))) { ctx.Delete(obj); } else { deactivatable.IsDeactivated = true; } }
public static void Deploy(IZetboxContext ctx, params IPackageProvider[] providers) { if (ctx == null) { throw new ArgumentNullException("ctx"); } if (providers == null) { throw new ArgumentNullException("providers"); } using (Log.InfoTraceMethodCall("Deploy")) { Log.InfoFormat("Starting Deployment from {0}", string.Join(", ", providers.Select(p => p.ToString()).ToArray())); try { // TODO: Das muss ich z.Z. machen, weil die erste Query eine Entity Query ist und noch nix geladen wurde.... var testObj = ctx.GetQuery <Zetbox.App.Base.ObjectClass>().FirstOrDefault(); Debug.WriteLine(testObj != null ? testObj.ToString() : String.Empty); } catch { // Ignore } Dictionary <Guid, IPersistenceObject> currentObjects = new Dictionary <Guid, IPersistenceObject>(); Log.Info("Loading namespaces"); var names = providers.SelectMany(p => LoadModuleNames(p)).Distinct().ToList(); if (names.Count == 0) { throw new InvalidOperationException("No modules found in import file"); } foreach (var name in names) { Log.InfoFormat("Prefetching objects for {0}", name); var module = ctx.GetQuery <Zetbox.App.Base.Module>().FirstOrDefault(m => m.Name == name); if (module != null) { foreach (var obj in PackagingHelper.GetMetaObjects(ctx, module)) { currentObjects[((Zetbox.App.Base.IExportable)obj).ExportGuid] = obj; } } else { Log.InfoFormat("Found new Module '{0}' in XML", name); } } providers.ForEach(p => p.RewindData()); Dictionary <Guid, IPersistenceObject> importedObjects = new Dictionary <Guid, IPersistenceObject>(); Log.Info("Loading"); foreach (var p in providers) { var reader = p.Reader; // Find Root Element while (reader.Read() && reader.NodeType != XmlNodeType.Element && reader.LocalName != "ZetboxPackaging" && reader.NamespaceURI != "http://dasz.at/Zetbox") { ; } // Read content while (reader.Read()) { if (reader.NodeType != XmlNodeType.Element) { continue; } var obj = ImportElement(ctx, currentObjects, p); if (obj == null) { throw new InvalidOperationException("Invalid import format: ImportElement returned NULL"); } importedObjects[((IExportableInternal)obj).ExportGuid] = obj; } } Log.Info("Reloading References"); foreach (var obj in importedObjects.Values) { obj.ReloadReferences(); } var objectsToDelete = currentObjects.Where(p => !importedObjects.ContainsKey(p.Key)); Log.InfoFormat("Deleting {0} objects marked for deletion", objectsToDelete.Count()); foreach (var pairToDelete in objectsToDelete) { ctx.Delete(pairToDelete.Value); } Log.Info("Deployment finished"); } }
/// <summary> /// Clears the destination zetbox tables. Due to FKs, ordering is required. /// </summary> private void ClearDestination(IZetboxContext ctx) { foreach (var log in ctx.GetQuery<MigrationLog>()) { ctx.Delete(log); } ctx.SubmitChanges(); // required ordering //executor.CleanDestination(tables["tbl_Cars"]); //executor.CleanDestination(tables["tbl_Customers"]); }
public override void TearDown() { ctx = GetContext(); ReloadObjects(ctx); ctx.Delete(one1); ctx.Delete(one2); ctx.Delete(n1); ctx.Delete(n2); ctx.SubmitChanges(); base.TearDown(); }
public override void SetUp() { base.SetUp(); iftFactory = scope.Resolve <InterfaceType.Factory>(); using (IZetboxContext ctx = GetContext()) { ctx.GetQuery <TestObjClass>().ForEach(obj => { obj.ObjectProp = null; ctx.Delete(obj); }); ProjectDataFixture.DeleteData(ctx); ctx.SubmitChanges(); } using (IZetboxContext ctx = GetContext()) { var list = new List <TestObjClass>(); while (list.Count < 2) { var newObj = ctx.Create <TestObjClass>(); newObj.ObjectProp = null; // kunde; newObj.StringProp = "blah" + list.Count; list.Add(newObj); } ctx.SubmitChanges(); firstId = list[0].ID; list[0].StringProp = "First"; list[0].TestEnumProp = TestEnum.First; secondId = list[1].ID; list[1].StringProp = "Second"; list[1].TestEnumProp = TestEnum.Second; ctx.SubmitChanges(); } }
/// <summary> /// Deletes all remaining test objects. /// </summary> /// <param name="ctx">this context is used to delete the objects</param> public static void DeleteData(IZetboxContext ctx) { ctx.GetQuery<Kunde>().ForEach(obj => ctx.Delete(obj)); ctx.GetQuery<Auftrag>().ForEach(obj => ctx.Delete(obj)); ctx.GetQuery<Task>().ForEach(obj => ctx.Delete(obj)); ctx.GetQuery<Projekt>().ForEach(obj => { ctx.Delete(obj); }); ctx.GetQuery<Mitarbeiter>().ForEach(obj => { ctx.Delete(obj); }); }
public override void SetUp() { base.SetUp(); using (IZetboxContext ctx = GetContext()) { ctx.GetQuery <TestObjClass>().ForEach(obj => { obj.ObjectProp = null; ctx.Delete(obj); }); ProjectDataFixture.DeleteData(ctx); ctx.SubmitChanges(); } using (IZetboxContext ctx = GetContext()) { ProjectDataFixture.CreateTestData(ctx); var newObj = ctx.Create <TestObjClass>(); newObj.StringProp = "The one and only"; newObj.TestEnumProp = TestEnum.First; ctx.SubmitChanges(); } }
public override void TearDown() { ctx = GetContext(); var tdObj = ctx.GetQuery<Assembly>().Where(a => a.ID == originalId); foreach (var o in tdObj.ToList()) { ctx.Delete(o); } ctx.SubmitChanges(); base.TearDown(); }
internal static void ApplyObjectChanges(IZetboxContext ctx, IEnumerable <ObjectNotificationRequest> notificationRequests, List <BaseServerPersistenceObject> objects, Dictionary <IPersistenceObject, IPersistenceObject> entityObjects) { Logging.Log.InfoFormat( "ApplyObjectChanges for {0} objects and {1} notification requests called.", objects.Count(), notificationRequests.Sum(req => req.IDs.Length)); // First of all, attach new Objects foreach (var obj in objects.Where(o => o.ClientObjectState == DataObjectState.New)) { ctx.Internals().AttachAsNew(obj); entityObjects[obj] = obj; } var concurrencyFailed = new List <IDataObject>(); // then apply changes foreach (var obj in objects.Where(o => o.ClientObjectState == DataObjectState.Modified)) { var ctxObj = ctx.FindPersistenceObject(ctx.GetInterfaceType(obj), obj.ID); ((BasePersistenceObject)ctxObj).RecordNotifications(); // optimistic concurrency if (obj is Zetbox.App.Base.IChangedBy) { var orig = (Zetbox.App.Base.IChangedBy)ctxObj; var send = (Zetbox.App.Base.IChangedBy)obj; if (Math.Abs((orig.ChangedOn - send.ChangedOn).Ticks) > 15) // postgres is only accurate down to µs (1/1000th ms), but DateTime is accurate down to 1/10th µs. Rounding errors cause invalid concurrency failures. { concurrencyFailed.Add((IDataObject)obj); } } ctxObj.ApplyChangesFrom(obj); entityObjects[ctxObj] = ctxObj; } if (concurrencyFailed.Count > 0) { throw new ConcurrencyException(concurrencyFailed); } // then update references foreach (var obj in objects.Where(o => o.ClientObjectState != DataObjectState.Deleted)) { var ctxObj = ctx.FindPersistenceObject(ctx.GetInterfaceType(obj), obj.ID); ((BasePersistenceObject)ctxObj).RecordNotifications(); ctxObj.ReloadReferences(); entityObjects[ctxObj] = ctxObj; } // then delete objects foreach (var obj in objects.Where(o => o.ClientObjectState == DataObjectState.Deleted)) { var ctxObj = ctx.FindPersistenceObject(ctx.GetInterfaceType(obj), obj.ID); ctx.Delete(ctxObj); } // Playback notifications foreach (var obj in entityObjects.Keys.Cast <BasePersistenceObject>()) { obj.PlaybackNotifications(); } }
public static void Deploy(IZetboxContext ctx, params IPackageProvider[] providers) { if (ctx == null) { throw new ArgumentNullException("ctx"); } if (providers == null) { throw new ArgumentNullException("providers"); } using (Log.InfoTraceMethodCall("Deploy")) { Log.InfoFormat("Starting Deployment from {0}", string.Join(", ", providers.Select(p => p.ToString()).ToArray())); try { // TODO: Das muss ich z.Z. machen, weil die erste Query eine Entity Query ist und noch nix geladen wurde.... var testObj = ctx.GetQuery<Zetbox.App.Base.ObjectClass>().FirstOrDefault(); Debug.WriteLine(testObj != null ? testObj.ToString() : String.Empty); } catch { // Ignore } Dictionary<Guid, IPersistenceObject> currentObjects = new Dictionary<Guid, IPersistenceObject>(); Log.Info("Loading namespaces"); var names = providers.SelectMany(p => LoadModuleNames(p)).Distinct().ToList(); if (names.Count == 0) throw new InvalidOperationException("No modules found in import file"); foreach (var name in names) { Log.InfoFormat("Prefetching objects for {0}", name); var module = ctx.GetQuery<Zetbox.App.Base.Module>().FirstOrDefault(m => m.Name == name); if (module != null) { foreach (var obj in PackagingHelper.GetMetaObjects(ctx, module)) { currentObjects[((Zetbox.App.Base.IExportable)obj).ExportGuid] = obj; } } else { Log.InfoFormat("Found new Module '{0}' in XML", name); } } providers.ForEach(p => p.RewindData()); Dictionary<Guid, IPersistenceObject> importedObjects = new Dictionary<Guid, IPersistenceObject>(); Log.Info("Loading"); foreach (var p in providers) { var reader = p.Reader; // Find Root Element while (reader.Read() && reader.NodeType != XmlNodeType.Element && reader.LocalName != "ZetboxPackaging" && reader.NamespaceURI != "http://dasz.at/Zetbox") ; // Read content while (reader.Read()) { if (reader.NodeType != XmlNodeType.Element) continue; var obj = ImportElement(ctx, currentObjects, p); if (obj == null) throw new InvalidOperationException("Invalid import format: ImportElement returned NULL"); importedObjects[((IExportableInternal)obj).ExportGuid] = obj; } } Log.Info("Reloading References"); foreach (var obj in importedObjects.Values) { obj.ReloadReferences(); } var objectsToDelete = currentObjects.Where(p => !importedObjects.ContainsKey(p.Key)); Log.InfoFormat("Deleting {0} objects marked for deletion", objectsToDelete.Count()); foreach (var pairToDelete in objectsToDelete) { ctx.Delete(pairToDelete.Value); } Log.Info("Deployment finished"); } }