/// <summary>
        /// Saves the specified object
        /// </summary>
        /// <param name="Object">Object to save</param>
        /// <returns>True if it is saved, false otherwise</returns>
        public bool Save(Dynamo Object)
        {
            if (Object == null)
            {
                return(false);
            }
            var IDProperty = Properties.FirstOrDefault(x => x is IID);

            if (IDProperty == null)
            {
                return(false);
            }
            object    IDValue = Object[IDProperty.Name];
            ClassType Item    = IDValue == null ? new ClassType() : AnyFunc(IDValue.ToString()).Check(new ClassType());

            if (!CanSaveFunc(Item))
            {
                return(false);
            }
            Dynamo SubSet = Object.SubSet(Properties.Where(x => x is IReference)
                                          .Select(x => x.Name)
                                          .ToArray());

            if (SubSet != null)
            {
                SubSet.CopyTo(Item);
            }
            return(SaveFunc(Item));
        }
 private static Dynamo CopyOrAssign(Dynamo ReturnValue, Dynamo Value)
 {
     if (Value == null)
     {
         return(ReturnValue);
     }
     if (ReturnValue == null)
     {
         return(Value);
     }
     Value.CopyTo(ReturnValue);
     return(ReturnValue);
 }
예제 #3
0
        public void TestCopyFromAndTo()
        {
            dynamic item = new Dynamo();
            var     obj  = new TestClass {
                Prop1 = "P1", Prop2 = "P2", Prop3 = "P3", Prop4 = -1
            };

            item.CopyFrom(obj);
            Assert.AreEqual("P1", item.Prop1);
            Assert.AreEqual("P2", item.Prop2);
            Assert.AreEqual("P3", item.Prop3);
            Assert.AreEqual(-1, item.Prop4);
            obj = new TestClass();
            Assert.AreEqual(null, obj.Prop1);
            Assert.AreEqual(null, obj.Prop2);
            Assert.AreEqual(null, obj.Prop3);
            Assert.AreEqual(0, obj.Prop4);
            item.CopyTo(obj);
            Assert.AreEqual("P1", obj.Prop1);
            Assert.AreEqual("P2", obj.Prop2);
            Assert.AreEqual("P3", obj.Prop3);
            Assert.AreEqual(-1, obj.Prop4);
            dynamic item2 = new Dynamo();

            item.CopyTo(item2);
            Assert.AreEqual(4, item2.Count);
            Assert.AreEqual("P1", item2.Prop1);
            Assert.AreEqual("P2", item2.Prop2);
            Assert.AreEqual("P3", item2.Prop3);
            Assert.AreEqual(-1, item2.Prop4);
            dynamic item3 = new Dynamo();

            item3.CopyFrom(item2);
            Assert.AreEqual(4, item3.Count);
            Assert.AreEqual("P1", item3.Prop1);
            Assert.AreEqual("P2", item3.Prop2);
            Assert.AreEqual("P3", item3.Prop3);
            Assert.AreEqual(-1, item3.Prop4);
        }
        private static void CopyOrAdd(List <Dynamo> ReturnValue, IProperty IDProperty, Dynamo Item)
        {
            Contract.Requires <ArgumentNullException>(IDProperty != null);
            if (Item == null)
            {
                return;
            }
            if (ReturnValue == null)
            {
                ReturnValue = new List <Dynamo>();
            }
            var IDValue = IDProperty.GetValue(Item);
            var Value   = ReturnValue.FirstOrDefault(x => IDProperty.GetValue(x).Equals(IDValue));

            if (Value == null)
            {
                ReturnValue.Add(Item);
            }
            else
            {
                Item.CopyTo(Value);
            }
        }