private static void AddShared(Item item, ItemsSharedData itemsSharedData) { var sharedFields = new FieldsData(); itemsSharedData.Add(item.ID, sharedFields); foreach (var field in item.Fields.Shared.OrderBy(x => Guid.Parse(x.Key)).ToArray()) { sharedFields.Add(Guid.Parse(field.Key), field.Value); } }
public void Execute() { Assert.ArgumentNotNullOrEmpty(ConnectionString, nameof(ConnectionString)); Assert.ArgumentNotNullOrEmpty(DatabaseName, nameof(DatabaseName)); Assert.ArgumentNotNullOrEmpty(OutputDirectory, nameof(OutputDirectory)); Assert.ArgumentCondition(Directory.Exists(OutputDirectory), nameof(OutputDirectory), $"The specified directory does not exist: {OutputDirectory}"); Assert.ArgumentCondition(Try(() => new SqlConnectionStringBuilder(ConnectionString)), nameof(ConnectionString), "$The specified connection string"); using (var definitionsWriter = File.OpenWrite(Path.Combine(OutputDirectory, $"{DatabaseName}.items.dat"))) { var definitions = new ItemDefinitions(); var itemsSharedData = new ItemsSharedData(); var itemsLanguagesData = new ItemsLanguagesData(); var context = ItemManager.Initialize(ConnectionString); var counter = 0; Console.WriteLine("Processing items..."); foreach (var item in GetItems(context)) { // definition AddDefinition(item, definitions); // shared fields AddShared(item, itemsSharedData); // unversioned and versioned-1 fields AddLanguages(item, itemsLanguagesData); Console.WriteLine($"{++counter:D5}. {GetItemPath(definitions, item.ID)}"); } Console.WriteLine("Serializing..."); Serializer.Serialize(definitionsWriter, new ItemsData { Definitions = definitions, SharedData = itemsSharedData, LanguageData = itemsLanguagesData }); } }