Forráskód Böngészése

Fixing errant writes to Entity.ID

Kenric Nugteren 6 hónapja
szülő
commit
612348e88c

+ 1 - 0
InABox.Core/DigitalForms/DataModel/DigitalFormDataModel.cs

@@ -19,6 +19,7 @@ namespace InABox.Core
             Entity.CommitChanges();
             Instance = new TInstance();
             Instance.ID = instanceid;
+            Instance.CommitChanges();
             Variables = variables;
             bRequiresLoad = true;
         }

+ 14 - 1
InABox.Core/Objects/Entity.cs

@@ -448,7 +448,20 @@ namespace InABox.Core
     {
     }
 
-
+    public static class EntityExtensions
+    {
+        /// <summary>
+        /// Sets the ID of an <see cref="Entity"/> while it is not observing, so that the change isn't registered.
+        /// </summary>
+        public static T SetID<T>(this T entity, Guid id)
+            where T : Entity
+        {
+            entity.SetObserving(false);
+            entity.ID = id;
+            entity.SetObserving(true);
+            return entity;
+        }
+    }
 
     public static class EntityFactory
     {

+ 1 - 0
InABox.Server/RPC/Handlers/Delete.cs

@@ -24,6 +24,7 @@ namespace InABox.Rpc
             {
                 var item = (Activator.CreateInstance(parameters.Type) as Entity)!;
                 item.ID = id;
+                item.CommitChanges();
                 items.Add(item);
             }
             store.Delete(items, parameters.AuditNote);

+ 11 - 6
inabox.wpf/DigitalForms/DigitalFormGrid.cs

@@ -145,13 +145,18 @@ namespace InABox.DynamicGrid
                 ID = document.ID;
             }
 
-            public Document ToDocument() => new Document
+            public Document ToDocument()
             {
-                FileName = FileName,
-                Data = Data,
-                TimeStamp = DateTime.Now,
-                ID = ID
-            };
+                var doc = new Document()
+                {
+                    ID = ID
+                };
+                doc.CommitChanges();
+                doc.FileName = FileName;
+                doc.Data = Data;
+                doc.TimeStamp = DateTime.Now;
+                return doc;
+            }
         }
     }
 

+ 2 - 0
inabox.wpf/DynamicGrid/Grids/DynamicImportForm.xaml.cs

@@ -367,7 +367,9 @@ namespace InABox.DynamicGrid
                 var id = _importer.ID;
                 var entityid = _importer.EntityID;
                 Serialization.DeserializeInto(json, _importer);
+                _importer.SetObserving(false);
                 _importer.ID = id;
+                _importer.SetObserving(true);
                 _importer.EntityID = entityid;
                 LoadData();
             }