private DBAccessor() { //var documents = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); //SafeCreateDirectory(documents + @"\HardwareLedger\Database\"); //Directory = documents + @"\HardwareLedger\Database\{0}.json"; Directory = @"Database\{0}.json"; //SafeCreateDirectory(documents + @"\HardwareLedger\Database\"); SafeCreateDirectory(@"Database\"); data = new Dictionary <Type, List <IPgmRow> >(); Reserves = ReadJson <Reserve, DBObject.Reserve>(); ShopTypes = ReadJson <ShopType, DBObject.ShopType>(); ItemTypes = ReadJson <ItemType, DBObject.ItemType>(); ItemStates = ReadJson <ItemState, DBObject.ItemState>(); Malfunctions = ReadJson <Malfunction, DBObject.Malfunction>(); Relations = ReadJson <Relation, DBObject.Relation>(); CollectSchedules = ReadJson <CollectSchedule, DBObject.CollectSchedule>(); ReserveShippings = ReadJson <ReserveShipping, DBObject.ReserveShipping>(); data.Add(typeof(Reserve), Reserves.Cast <IPgmRow>().ToList()); data.Add(typeof(ShopType), ShopTypes.Cast <IPgmRow>().ToList()); data.Add(typeof(ItemType), ItemTypes.Cast <IPgmRow>().ToList()); data.Add(typeof(ItemState), ItemStates.Cast <IPgmRow>().ToList()); data.Add(typeof(Malfunction), Malfunctions.Cast <IPgmRow>().ToList()); data.Add(typeof(Relation), Relations.Cast <IPgmRow>().ToList()); data.Add(typeof(CollectSchedule), CollectSchedules.Cast <IPgmRow>().ToList()); data.Add(typeof(ReserveShipping), ReserveShippings.Cast <IPgmRow>().ToList()); }
public DataSet ToUntypedDataSet() { var dataSet = new DataSet(); dataSet.DataSetName = DataSetName; dataSet.CaseSensitive = CaseSensitive; dataSet.EnforceConstraints = EnforceConstraints; dataSet.Locale = Locale; dataSet.Namespace = Namespace; dataSet.Prefix = Prefix; dataSet.RemotingFormat = RemotingFormat; foreach (var typedTable in Tables.Cast <DataTable>()) { var dataTable = new DataTable(); dataTable.TableName = typedTable.TableName; dataTable.DisplayExpression = typedTable.DisplayExpression; dataTable.MinimumCapacity = typedTable.MinimumCapacity; dataTable.Namespace = typedTable.Namespace; dataTable.Prefix = typedTable.Prefix; dataTable.RemotingFormat = typedTable.RemotingFormat; foreach (var column in typedTable.Columns.Cast <DataColumn>()) { var dataColumn = new DataColumn(); dataColumn.ColumnName = column.ColumnName; dataColumn.AllowDBNull = column.AllowDBNull; dataColumn.AutoIncrement = column.AutoIncrement; dataColumn.AutoIncrementSeed = column.AutoIncrementSeed; dataColumn.AutoIncrementStep = column.AutoIncrementStep; dataColumn.Caption = column.Caption; dataColumn.ColumnMapping = column.ColumnMapping; dataColumn.DataType = column.DataType; dataColumn.DateTimeMode = column.DateTimeMode; dataColumn.DefaultValue = column.DefaultValue; dataColumn.Expression = column.Expression; dataColumn.MaxLength = column.MaxLength; dataColumn.Namespace = column.Namespace; dataColumn.Prefix = column.Prefix; dataColumn.ReadOnly = column.ReadOnly; foreach (var property in column.ExtendedProperties.Cast <DictionaryEntry>()) { dataColumn.ExtendedProperties.Add(property.Key, property.Value); } dataTable.Columns.Add(dataColumn); } foreach (var row in typedTable.Rows.Cast <DataRow>()) { dataTable.ImportRow(row); } dataTable.PrimaryKey = typedTable.PrimaryKey .Select(col => dataTable.Columns[col.ColumnName]) .ToArray(); foreach (var property in typedTable.ExtendedProperties.Cast <DictionaryEntry>()) { dataTable.ExtendedProperties.Add(property.Key, property.Value); } foreach (var constraint in typedTable.Constraints.Cast <Constraint>()) { if (!Relations.Cast <DataRelation>().Any(rel => (rel.ChildKeyConstraint == constraint) || (rel.ParentKeyConstraint == constraint))) { if (constraint is UniqueConstraint uniqueConstraint) { if (!uniqueConstraint.IsPrimaryKey) { dataTable.Constraints.Add(new UniqueConstraint( name: uniqueConstraint.ConstraintName, column: dataTable.Columns[uniqueConstraint.Columns.Single().ColumnName])); } } else { throw new Exception($"Don't know how to clone a constraint of type {constraint.GetType()}"); } } } dataSet.Tables.Add(dataTable); } foreach (var property in ExtendedProperties.Cast <DictionaryEntry>()) { dataSet.ExtendedProperties.Add(property.Key, property.Value); } foreach (var relation in Relations.Cast <DataRelation>()) { // NB: In the context of the unit test, this is assuming that there is only one column in a relation. var dataRelation = new DataRelation( relation.RelationName, parentColumn: dataSet.Tables[relation.ParentTable.TableName].Columns[relation.ParentColumns.Single().ColumnName], childColumn: dataSet.Tables[relation.ChildTable.TableName].Columns[relation.ChildColumns.Single().ColumnName]); foreach (var property in relation.ExtendedProperties.Cast <DictionaryEntry>()) { dataRelation.ExtendedProperties.Add(property.Key, property.Value); } dataSet.Relations.Add(dataRelation); } return(dataSet); }