1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
|
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
namespace System.Data.Entity.Objects
{
using System.Collections.Generic;
using System.Data.Entity.Core.Objects;
using System.Data.Entity.Core.Objects.DataClasses;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using Xunit;
public class SerializationScenarios : FunctionalTestBase
{
public class ProxiesContext : DbContext
{
static ProxiesContext()
{
Database.SetInitializer<ProxiesContext>(null);
}
public DbSet<MeLazyLoadS> MeLazyLoads { get; set; }
public DbSet<MeTrackChangesS> MeTrackChanges { get; set; }
}
[Fact]
public void Change_tracking_proxy_can_be_binary_deserialized_when_running_under_full_trust()
{
using (var context = new ProxiesContext())
{
var proxy = context.MeTrackChanges.Create();
Assert.True(proxy is IEntityWithRelationships);
proxy.Id = 77;
var stream = new MemoryStream();
var formatter = new BinaryFormatter();
formatter.Serialize(stream, proxy);
stream.Seek(0, SeekOrigin.Begin);
var deserialized = (MeTrackChangesS)formatter.Deserialize(stream);
Assert.Same(proxy.GetType(), deserialized.GetType());
Assert.Equal(77, deserialized.Id);
}
}
[Fact]
public void Lazy_loading_proxy_can_be_binary_deserialized_when_running_under_full_trust()
{
using (var context = new ProxiesContext())
{
var proxy = context.MeLazyLoads.Create();
Assert.False(proxy is IEntityWithRelationships);
proxy.Id = 77;
var stream = new MemoryStream();
var formatter = new BinaryFormatter();
formatter.Serialize(stream, proxy);
stream.Seek(0, SeekOrigin.Begin);
var deserialized = (MeLazyLoadS)formatter.Deserialize(stream);
Assert.Same(proxy.GetType(), deserialized.GetType());
Assert.Equal(77, deserialized.Id);
}
}
[Fact]
public void Change_tracking_proxy_can_be_data_contract_deserialized_with_resolver_when_running_under_full_trust()
{
using (var context = new ProxiesContext())
{
var proxy = context.MeTrackChanges.Create();
Assert.True(proxy is IEntityWithRelationships);
proxy.Id = 77;
var stream = new MemoryStream();
var serializer = new DataContractSerializer(
typeof(MeTrackChangesS), null, int.MaxValue, false, true, null, new ProxyDataContractResolver());
serializer.WriteObject(stream, proxy);
stream.Seek(0, SeekOrigin.Begin);
var deserialized = (MeTrackChangesS)serializer.ReadObject(stream);
Assert.IsType<MeTrackChangesS>(deserialized); // Resolver returns non-proxy type
Assert.Equal(77, deserialized.Id);
}
}
[Fact]
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;
var stream = new MemoryStream();
var serializer = new DataContractSerializer(
typeof(MeLazyLoadS), null, int.MaxValue, false, true, null, new ProxyDataContractResolver());
serializer.WriteObject(stream, proxy);
stream.Seek(0, SeekOrigin.Begin);
var deserialized = (MeLazyLoadS)serializer.ReadObject(stream);
Assert.IsType<MeLazyLoadS>(deserialized); // Resolver returns non-proxy type
Assert.Equal(77, deserialized.Id);
}
}
[Fact]
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();
Assert.False(proxy is IEntityWithRelationships);
proxy.Id = 77;
var otherProxy = context.MeTrackChanges.Create();
var stream = new MemoryStream();
var serializer = new DataContractSerializer(proxy.GetType(), new[] { proxy.GetType(), otherProxy.GetType() }, int.MaxValue, false, true, null);
serializer.WriteObject(stream, proxy);
stream.Seek(0, SeekOrigin.Begin);
var deserialized = (MeLazyLoadS)serializer.ReadObject(stream);
Assert.Same(proxy.GetType(), deserialized.GetType());
Assert.Equal(77, deserialized.Id);
}
}
}
[Serializable]
public class MeTrackChangesS
{
public virtual int Id { get; set; }
public virtual ICollection<MeLazyLoadS> MeLazyLoad { get; set; }
}
[Serializable]
public class MeLazyLoadS
{
public int Id { get; set; }
public virtual MeTrackChangesS MeTrackChanges { get; set; }
}
}
|