/// <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); }
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); }
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; } } }