Esempio n. 1
0
        public void Composition_Inheritance_Add_Derived_Child_To_Derived_Parent()
        {
            CompositionInheritanceScenarios ctxt = new CompositionInheritanceScenarios(CompositionInheritanceScenarios_Uri);

            CI_SpecialParent     parent          = null;
            SubmitOperation      so              = null;
            IEnumerable <Entity> expectedUpdates = null;
            LoadOperation        lo              = ctxt.Load(ctxt.GetParentsQuery(), false);

            EnqueueConditional(() => lo.IsComplete);
            EnqueueCallback(delegate
            {
                TestHelperMethods.AssertOperationSuccess(lo);

                parent = ctxt.CI_Parents.OfType <CI_SpecialParent>().First();
                CI_AdoptedChild newChild = new CI_AdoptedChild()
                {
                    Age = 5,
                };
                parent.Children.Add(newChild);
                Assert.AreSame(parent, ((Entity)newChild).Parent);

                EntityChangeSet cs = ctxt.EntityContainer.GetChanges();
                Assert.IsTrue(cs.ModifiedEntities.Count == 1, "wrong modified count");
                Assert.IsTrue(cs.AddedEntities.Count == 1, "wrong added count");
                Assert.IsTrue(cs.RemovedEntities.Count == 0, "wrong removed count");
                Assert.IsTrue(cs.ModifiedEntities.Contains(parent));
                Assert.IsTrue(cs.AddedEntities.Contains(newChild));

                // verify that original associations are set up correctly
                IEnumerable <ChangeSetEntry> entityOps = ChangeSetBuilder.Build(cs);
                this.ValidateEntityOperationAssociations(entityOps);

                expectedUpdates = cs.Where(p => p.HasChildChanges || p.HasPropertyChanges).ToArray();
                so = ctxt.SubmitChanges(TestHelperMethods.DefaultOperationAction, null);
            });
            EnqueueConditional(() => so.IsComplete);
            EnqueueCallback(delegate
            {
                this.VerifySuccess(ctxt, so, expectedUpdates);
            });

            EnqueueTestComplete();
        }
Esempio n. 2
0
        //public static void Validate(Parent parent)
        //{
        //    // Simulate a validation pass that enumerates all children.
        //    foreach (Child child in parent.Children)
        //    {
        //        foreach (GrandChild grandChild in child.Children)
        //        {
        //            GreatGrandChild greatGrandChild = grandChild.Child;
        //        }
        //    }
        //}

        /// <summary>
        /// Create  compositional hierarchy that includes both
        /// collection and singleton compositions
        /// </summary>
        public static List <CI_Parent> CreateCompositionHierarchy()
        {
            int parentKey = 1;
            int childKey  = 1;

            // Create 3 Parents with children.
            List <CI_Parent> parents = new List <CI_Parent>();

            for (int i = 0; i < 3; i++)
            {
                // one of these is a derived parent type
                CI_Parent p = i == 1 ? new CI_SpecialParent() : new CI_Parent();

                p.ID = parentKey++;
                parents.Add(p);

                // Create 2 natural children and 2 adopted children
                // It is critical for these scenarios to have the potential
                // for both modified and unmodified derived composition children
                // in a changeset
                for (int j = 0; j < 2; j++)
                {
                    CI_Child c = new CI_Child
                    {
                        ID       = childKey++,
                        ParentID = p.ID,
                        Parent   = p
                    };
                    p.Children.Add(c);
                }
                for (int j = 0; j < 2; j++)
                {
                    CI_AdoptedChild c = new CI_AdoptedChild
                    {
                        ID       = childKey++,
                        ParentID = p.ID,
                        Parent   = p
                    };
                    p.Children.Add(c);
                }
            }

            return(parents);
        }
Esempio n. 3
0
        public void UpdateAdoptedChild(CI_AdoptedChild child)
        {
            SetOperationInvoked(child);

            child.OperationResult = "Update";
        }
Esempio n. 4
0
        public void InsertAdoptedChild(CI_AdoptedChild car)
        {
            SetOperationInvoked(car);

            car.OperationResult = "Insert";
        }
Esempio n. 5
0
 public void CustomOp_AdoptedChild(CI_AdoptedChild child)
 {
     this.SetOperationInvoked(child, "CustomOp_AdoptedChild");
     child.OperationResult += ",CustomOp_AdoptedChild";
 }