Browse Source

Resolved #1580 Make Entity.Id protected to prevent accidently changing it.

pull/1810/head
Halil İbrahim Kalkan 7 years ago
parent
commit
8f2de58e44
  1. 2
      framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Entity.cs
  2. 35
      framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/Utf8JsonMemoryDbSerializer.cs
  3. 4
      framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Entities/EntityHelper_Tests.cs

2
framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Entity.cs

@ -23,7 +23,7 @@ namespace Volo.Abp.Domain.Entities
public abstract class Entity<TKey> : Entity, IEntity<TKey> public abstract class Entity<TKey> : Entity, IEntity<TKey>
{ {
/// <inheritdoc/> /// <inheritdoc/>
public virtual TKey Id { get; set; } public virtual TKey Id { get; protected set; }
protected Entity() protected Entity()
{ {

35
framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/Utf8JsonMemoryDbSerializer.cs

@ -1,5 +1,8 @@
using System; using System;
using System.Reflection;
using System.Text; using System.Text;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Abp.Json; using Volo.Abp.Json;
@ -7,21 +10,43 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb
{ {
public class Utf8JsonMemoryDbSerializer : IMemoryDbSerializer, ITransientDependency public class Utf8JsonMemoryDbSerializer : IMemoryDbSerializer, ITransientDependency
{ {
private readonly IJsonSerializer _jsonSerializer; private static readonly JsonSerializerSettings MemoryDbSerializerSettings;
public Utf8JsonMemoryDbSerializer(IJsonSerializer jsonSerializer) static Utf8JsonMemoryDbSerializer()
{ {
_jsonSerializer = jsonSerializer; MemoryDbSerializerSettings = new JsonSerializerSettings
{
ContractResolver = new ResolverWithPrivateSetters(),
ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor
};
} }
byte[] IMemoryDbSerializer.Serialize(object obj) byte[] IMemoryDbSerializer.Serialize(object obj)
{ {
return Encoding.UTF8.GetBytes(_jsonSerializer.Serialize(obj)); var jsonString = JsonConvert.SerializeObject(obj, MemoryDbSerializerSettings);
return Encoding.UTF8.GetBytes(jsonString);
} }
public object Deserialize(byte[] value, Type type) public object Deserialize(byte[] value, Type type)
{ {
return _jsonSerializer.Deserialize(type, Encoding.UTF8.GetString(value)); var jsonString = Encoding.UTF8.GetString(value);
return JsonConvert.DeserializeObject(jsonString, type, MemoryDbSerializerSettings);
}
public class ResolverWithPrivateSetters : DefaultContractResolver
{
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
var prop = base.CreateProperty(member, memberSerialization);
if (prop.Writable)
{
return prop;
}
prop.Writable = member.As<PropertyInfo>()?.GetSetMethod(true) != null;
return prop;
}
} }
} }
} }

4
framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Entities/EntityHelper_Tests.cs

@ -40,7 +40,7 @@ namespace Volo.Abp.Domain.Entities
private class MyEntityImplementsIEntity : IEntity<Guid> private class MyEntityImplementsIEntity : IEntity<Guid>
{ {
public Guid Id { get; set; } public Guid Id { get; protected set; }
public object[] GetKeys() public object[] GetKeys()
{ {
@ -51,7 +51,7 @@ namespace Volo.Abp.Domain.Entities
private class MyEntityDisablesIdGeneration : Entity<Guid> private class MyEntityDisablesIdGeneration : Entity<Guid>
{ {
[DisableIdGeneration] [DisableIdGeneration]
public override Guid Id { get; set; } public override Guid Id { get; protected set; }
} }
} }
} }

Loading…
Cancel
Save