예제 #1
0
        /// <summary>
        /// Merge two EntityFramework instances together into the first framework
        /// </summary>
        /// <param name="framework1"></param>
        /// <param name="framework2"></param>
        internal static EntityFramework MergeWith(this EntityFramework framework1, EntityFramework framework2)
        {
            ObjectGraphMerger <EntityFramework> merger = new ObjectGraphMerger <EntityFramework>(framework1, framework2);
            var edmx = merger.Merge();

            // Clean up bindingParameters on actions and methods to be consistently the same
            foreach (var schema in edmx.DataServices.Schemas)
            {
                foreach (var action in schema.Actions)
                {
                    foreach (var param in action.Parameters.Where(x => x.Name == "bindingParameter" || x.Name == "this"))
                    {
                        param.Name     = "bindingParameter";
                        param.Nullable = null;
                    }
                }
                foreach (var func in schema.Functions)
                {
                    foreach (var param in func.Parameters.Where(x => x.Name == "bindingParameter" || x.Name == "this"))
                    {
                        param.Name     = "bindingParameter";
                        param.Nullable = null;
                    }
                }
            }

            return(edmx);
        }
예제 #2
0
        public void MergeSimpleTypes()
        {
            MergableClass[] itemsToMerge = new MergableClass[]
            {
                new MergableClass {
                    Name = "Ryan", IsAuthor = true, ExpectedToBeNull = "foobar"
                },
                new MergableClass {
                    Name = "Ryan", IsAuthor = false, ExpectedToBeNull = "baz"
                }
            };

            var merger = new ObjectGraphMerger <MergableClass>(itemsToMerge);
            var result = merger.Merge();

            Assert.IsNotNull(result);
            Assert.AreEqual("Ryan", result.Name);
            Assert.AreEqual(true, result.IsAuthor);
            Assert.IsNull(result.ExpectedToBeNull);
        }
예제 #3
0
        public void MergeCollection()
        {
            var itemsToMerge1 = new MergableClass[]
            {
                new MergableClass {
                    Name = "Ryan", IsAuthor = true, ExpectedToBeNull = "foobar"
                },
                new MergableClass {
                    Name = "Brad", IsAuthor = false, ExpectedToBeNull = "baz"
                }
            };

            var itemsToMerge2 = new MergableClass[]
            {
                new MergableClass {
                    Name = "Ryan", IsAuthor = false, ExpectedToBeNull = "baz"
                },
                new MergableClass {
                    Name = "Daron", IsAuthor = false, ExpectedToBeNull = "baz"
                }
            };

            var graphsToMerge = new MergableCollectionPropertyClass[]
            {
                new MergableCollectionPropertyClass {
                    Authors = itemsToMerge1
                },
                new MergableCollectionPropertyClass {
                    Authors = itemsToMerge2
                }
            };

            var merger = new ObjectGraphMerger <MergableCollectionPropertyClass>(graphsToMerge);
            var result = merger.Merge();

            Assert.IsNotNull(result);
            Assert.IsNotNull(result.Authors);
            Assert.AreEqual(3, result.Authors.Length);

            foreach (var author in result.Authors)
            {
                switch (author.Name)
                {
                case "Ryan":
                    Assert.IsTrue(author.IsAuthor);
                    break;

                case "Daron":
                    Assert.IsFalse(author.IsAuthor);
                    break;

                case "Brad":
                    Assert.IsFalse(author.IsAuthor);
                    break;

                default:
                    Assert.Fail("Unexpected author name was returned");
                    break;
                }
            }
        }