public void Graph_serialization_works_with_change_tracking_cycle_and_lazy_loading_disabled() { using (var context = new ProxiesContext()) { context.Configuration.LazyLoadingEnabled = false; var children = new MeTrackChangesS[2]; MeTrackChangesS[] deserializedChildren; var childProxy1 = context.MeTrackChanges.Create(); var childProxy2 = context.MeTrackChanges.Create(); var parentProxy = context.MeTrackChanges.Create(); children[0] = childProxy1; children[1] = childProxy2; childProxy1.Id = 77; childProxy2.Id = 88; parentProxy.Id = 99; childProxy1.Parent = parentProxy; childProxy2.Parent = parentProxy; parentProxy.Children.Add(childProxy1); parentProxy.Children.Add(childProxy2); var deserialized = DeserializeFromBinaryFormatter(childProxy1); Assert.Same(childProxy1.GetType(), deserialized.GetType()); Assert.Equal(77, deserialized.Id); Assert.Equal(99, deserialized.Parent.Id); Assert.Equal(2, deserialized.Parent.Children.Count); Assert.True(deserialized.Parent.Children.Contains(deserialized)); deserializedChildren = deserialized.Parent.Children.ToArray(); for (int i = 0; i < children.Length; i++) { Assert.Same(children[i].GetType(), deserializedChildren[i].GetType()); Assert.Equal(children[i].Id, deserializedChildren[i].Id); Assert.Equal(deserializedChildren[i].Parent, deserialized.Parent); } } }
public void Lazy_loading_proxy_can_be_data_contract_deserialized_with_known_types_when_running_under_full_trust() { using (var context = new ProxiesContext()) { var proxy = context.MeLazyLoads.Create(); var otherProxy = context.MeTrackChanges.Create(); Assert.False(proxy is IEntityWithRelationships); proxy.Id = 77; proxy.MeComplexTypeS.Number = 88; var serializer = new DataContractSerializer( proxy.GetType(), new DataContractSerializerSettings { KnownTypes = new[] { proxy.GetType(), otherProxy.GetType() }, PreserveObjectReferences = true }); var deserialized = DeserializeWithDatacontractSerializer(proxy, serializer); Assert.Same(proxy.GetType(), deserialized.GetType()); Assert.Equal(77, deserialized.Id); Assert.Equal(88, deserialized.MeComplexTypeS.Number); } }
public void Lazy_loading_proxy_can_be_data_contract_deserialized_with_resolver_when_running_under_full_trust() { using (var context = new ProxiesContext()) { var proxy = context.MeLazyLoads.Create(); Assert.False(proxy is IEntityWithRelationships); proxy.Id = 77; proxy.MeComplexTypeS.Number = 88; var serializer = new DataContractSerializer( typeof(MeLazyLoadS), new DataContractSerializerSettings { PreserveObjectReferences = true, DataContractResolver = new ProxyDataContractResolver() }); var deserialized = DeserializeWithDatacontractSerializer(proxy, serializer); // Resolver returns non-proxy type Assert.IsType <MeLazyLoadS>(deserialized); Assert.Equal(77, deserialized.Id); Assert.Equal(88, deserialized.MeComplexTypeS.Number); } }
public void Graph_serialization_preserves_related_entities_deserialized_with_data_contract_deserializer() { using (var context = new ProxiesContext()) { var proxy = context.MeLazyLoads.Create(); var otherProxy = context.MeTrackChanges.Create(); proxy.Id = 77; otherProxy.Id = 99; proxy.MeTrackChanges = otherProxy; var serializer = new DataContractSerializer( typeof(MeLazyLoadS), null, int.MaxValue, false, true, null, new ProxyDataContractResolver()); var deserialized = DeserializeWithDatacontractSerializer(proxy, serializer); // Resolver returns non-proxy type Assert.IsType <MeLazyLoadS>(deserialized); Assert.Equal(77, deserialized.Id); Assert.IsType <MeTrackChangesS>(deserialized.MeTrackChanges); Assert.Equal(99, deserialized.MeTrackChanges.Id); } }
public void Graph_serialization_works_with_simple_entity_cycle() { using (var context = new ProxiesContext()) { var children = new MeSimpleEntitiesS[2]; MeSimpleEntitiesS[] deserializedChildren; var childProxy1 = context.MeSimpleEntities.Create(); var childProxy2 = context.MeSimpleEntities.Create(); var parentProxy = context.MeSimpleEntities.Create(); children[0] = childProxy1; children[1] = childProxy2; childProxy1.Id = 77; childProxy2.Id = 88; parentProxy.Id = 99; childProxy1.Parent = parentProxy; childProxy2.Parent = parentProxy; parentProxy.Children.Add(childProxy1); parentProxy.Children.Add(childProxy2); var deserialized = DeserializeFromBinaryFormatter(childProxy1); Assert.Same(childProxy1.GetType(), deserialized.GetType()); Assert.Equal(77, deserialized.Id); Assert.Equal(99, deserialized.Parent.Id); Assert.Equal(2, deserialized.Parent.Children.Count); Assert.True(deserialized.Parent.Children.Contains(deserialized)); deserializedChildren = deserialized.Parent.Children.ToArray(); for (int i = 0; i < children.Length; i++) { Assert.Same(children[i].GetType(), deserializedChildren[i].GetType()); Assert.Equal(children[i].Id, deserializedChildren[i].Id); Assert.Equal(deserializedChildren[i].Parent, deserialized.Parent); } } }
public void Simple_entities_can_be_binary_serialized_when_running_under_full_trust() { using (var context = new ProxiesContext()) { var proxy = context.MeSimpleEntities.Create(); Assert.False(proxy is IEntityWithRelationships); proxy.Id = 77; proxy.Name = "Entity"; proxy.MeComplexTypeS.Number = 88; proxy.Geometry = DbGeometry.FromText("POINT (30 10)"); proxy.Enum = MeSimpleEntitiesS.EnumType.ZERO; var deserialized = DeserializeFromBinaryFormatter(proxy); Assert.Same(proxy.GetType(), deserialized.GetType()); Assert.Equal(77, deserialized.Id); Assert.Equal("Entity", deserialized.Name); Assert.Equal(88, deserialized.MeComplexTypeS.Number); Assert.Equal(DbGeometry.FromText("POINT (30 10)").AsText(), deserialized.Geometry.AsText()); Assert.Equal(MeSimpleEntitiesS.EnumType.ZERO, deserialized.Enum); } }