Show / Hide Table of Contents

Namespace Eco.Core.Serialization.Migrations.DataMigrations

Classes

DataInput

DataInput defines input for migration which optionally may have own member inputs. During migration it may Eco.Core.Serialization.Migrations.DataMigrations.DataInput.Read(Eco.Core.Serialization.Migrations.MigrationManager,System.IO.BinaryReader,System.IO.Stream,Eco.Core.Serialization.Serializers.ISerializer,System.Collections.Generic.Dictionary{Eco.Core.Serialization.Migrations.DataMigrations.IDataInput,Eco.Core.Serialization.Migrations.DataMigrations.ReaderDataInput}) from System.IO.BinaryReader ReaderDataInput for itself and for all own members and update data mapping. Using data inputs let you avoid full objects deserialization (and so delay it until actual deserialization stage keeping it binary compatible with migrations for newer versions). I.e. you need to add a comment containing creator id to some entity. With data input it can be done like:

this.AddDataMigration(typeof(SomeType), dm => {
    var creatorId = dm.Member("Creator").ReferenceId();
    dm.AddMember<string>("Comment", new[] { creatorId }, inputs => $"Creator ID: {inputs[0].Value}");
});

If you then have another migration for SomeType then it will work just fine with new serialized content containing Comment field.

Without data inputs you need to do it hacky way like

new ObjectInstanceMigration<SomeType, SomeType>(typeName, obj => {
    SimpleFixups.Add(() => obj.Comment = $"Creator ID: {obj.Creator.Value}");
});

It may look simpler, but it makes this migration incompatible with any further migration. I.e. if you then have new migration which uses Comment value for something else then you need to modify old migration to do the update in SimpleFixup block in addition to new migration to make it compatible with different save versions.

DataMigrationExtensions

FunctionMemberDataModification

FunctionMemberDataModification<TOutput>

MemberDataInput

Represents class member data input.

MemberDataModification

Base class for data member modifications (update, add, migrate, remove etc). Used in DataMigration.

MemberDataModification<TOutput>

Base class for data member modifications with known output value type. Used in DataMigration.

MemberNameChangeDataModification

Rename member data modification.

MemberTypeChangeDataModification

MigrationDataModification

MemberDataModification which applies modification to member with custom IMigration.

OutputEntryDataModification

Modification with generates ReaderDataInput with Eco.Core.Serialization.Migrations.DataMigrations.OutputEntryDataModification.generateOutput function for specified Eco.Core.Serialization.Migrations.DataMigrations.OutputEntryDataModification.dataInput. May be used by DictionaryDataMigration or CollectionToDictionaryDataMigration for key/value data generation.

OutputEntryDataModification<TOutput>

Modification with generates ReaderDataInput for value of type TOutput with Eco.Core.Serialization.Migrations.DataMigrations.OutputEntryDataModification`1.generateOutput function for specified Eco.Core.Serialization.Migrations.DataMigrations.OutputEntryDataModification`1.dataInput. May be used by DictionaryDataMigration or CollectionToDictionaryDataMigration for key/value data generation.

ReaderDataInput

ReferenceMemberDataModification

SchemaTypeChangeModification

Eco.Core.Serialization.Migrations.DataMigrations.IDataModification which changes schema type of data object itself (not one of it's members).

Interfaces

IDataInput

IEntryDataModification

Data modification for an entry of dictionary or collection.

☀
☾
In This Article
Back to top
Copyright (c) Strange Loop Games 2021
☀
☾