generated from SwissLife-OSS/template
-
Notifications
You must be signed in to change notification settings - Fork 9
/
MigrationSerializer.cs
44 lines (33 loc) · 1.28 KB
/
MigrationSerializer.cs
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
using MongoDB.Bson;
using MongoDB.Bson.IO;
using MongoDB.Bson.Serialization;
using MongoDB.Bson.Serialization.Serializers;
namespace MongoDB.Extensions.Migration;
class MigrationSerializer<T> : BsonClassMapSerializer<T> where T : IVersioned
{
private readonly EntityContext _context;
private readonly MigrationRunner<T> _migrationRunner;
public MigrationSerializer(EntityContext context) : base(BsonClassMap.LookupClassMap(typeof(T)))
{
_context = context;
_migrationRunner = new MigrationRunner<T>(context);
}
public override void Serialize(
BsonSerializationContext context,
BsonSerializationArgs args,
T value)
{
value.Version = _context.Option.CurrentVersion;
base.Serialize(context, args, value);
}
public override T Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
{
BsonDocument bsonDocument = BsonDocumentSerializer.Instance.Deserialize(context);
_migrationRunner.Run(bsonDocument);
var migratedContext =
BsonDeserializationContext.CreateRoot(new BsonDocumentReader(bsonDocument));
T entity = base.Deserialize(migratedContext, args);
entity.Version = _context.Option.CurrentVersion;
return entity;
}
}