public void UpdateRelationsInBulk() { _db.Open(); Console.WriteLine("--------------- Updating Relations ---------------"); var relations = _mongoConnector.GetAllRelationsFromChangeset(_localChangeset); var tempRelationList = new List <Relation>(); foreach (var relation in relations) { tempRelationList.Add(relation); if (tempRelationList.Count != 10000) { continue; } var relationTable = CreateRelationTable(); var relationTagTable = CreateTagTable(); var memberTable = CreatememberTable(); foreach (var relation1 in tempRelationList) { foreach (var tagKey in relation1.Tags.Keys) { var tagRow = relationTagTable.NewRow(); var value = relation1.Tags[tagKey]; var validValue = value.Substring(0, Math.Min(200, value.Length)); tagRow.ItemArray = new object[] { relation1.Id, tagKey, validValue }; relationTagTable.Rows.Add(tagRow); } var memberReference = new HashSet <long>(); foreach (var member in relation1.Members) { if (memberReference.Contains(member.Reference)) { continue; } memberReference.Add(member.Reference); var memberRow = relationTagTable.NewRow(); var validValue = member.Role.Substring(0, Math.Min(200, member.Role.Length)); memberRow.ItemArray = new object[] { relation1.Id, member.Reference, member.Type, validValue }; memberTable.Rows.Add(memberRow); } var sqlRelation = new SqlRelation { Id = relation1.Id, TimeStamp = relation1.TimeStamp, LocalChangeset = relation1.LocalChangeset, }; var relationRow = relationTable.NewRow(); relationRow.ItemArray = new object[] { sqlRelation.Id, sqlRelation.TimeStamp, sqlRelation.LocalChangeset }; relationTable.Rows.Add(relationRow); } using (var bulk = new SqlBulkCopy(_db)) { bulk.DestinationTableName = "Relation"; bulk.WriteToServer(relationTable); } using (var bulk = new SqlBulkCopy(_db)) { bulk.DestinationTableName = "RelationTag"; bulk.WriteToServer(relationTagTable); } using (var bulk = new SqlBulkCopy(_db)) { bulk.DestinationTableName = "Member"; bulk.WriteToServer(memberTable); } tempRelationList = new List <Relation>(10000); Console.WriteLine("10000 Passed"); } //---------------------------------------------------------------------------- // Remains var relationTable1 = CreateRelationTable(); var relationTagTable1 = CreateTagTable(); var memberTable1 = CreatememberTable(); foreach (var relation1 in tempRelationList) { foreach (var tagKey in relation1.Tags.Keys) { var tagRow = relationTagTable1.NewRow(); var value = relation1.Tags[tagKey]; var validValue = value.Substring(0, Math.Min(200, value.Length)); tagRow.ItemArray = new object[] { relation1.Id, tagKey, validValue }; relationTagTable1.Rows.Add(tagRow); } var memberReference = new HashSet <long>(); foreach (var member in relation1.Members) { if (memberReference.Contains(member.Reference)) { continue; } memberReference.Add(member.Reference); var memberRow = memberTable1.NewRow(); var validValue = member.Role.Substring(0, Math.Min(200, member.Role.Length)); memberRow.ItemArray = new object[] { relation1.Id, member.Reference, member.Type, validValue }; memberTable1.Rows.Add(memberRow); } var sqlRelation = new SqlRelation { Id = relation1.Id, TimeStamp = relation1.TimeStamp, LocalChangeset = relation1.LocalChangeset, }; var relationRow = relationTable1.NewRow(); relationRow.ItemArray = new object[] { sqlRelation.Id, sqlRelation.TimeStamp, sqlRelation.LocalChangeset }; relationTable1.Rows.Add(relationRow); } using (var bulk = new SqlBulkCopy(_db)) { bulk.DestinationTableName = "Relation"; bulk.WriteToServer(relationTable1); } using (var bulk = new SqlBulkCopy(_db)) { bulk.DestinationTableName = "RelationTag"; bulk.WriteToServer(relationTagTable1); } using (var bulk = new SqlBulkCopy(_db)) { bulk.DestinationTableName = "Member"; bulk.WriteToServer(memberTable1); } _db.Close(); }