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.