Пример #1
0
        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());
        }
Пример #2
0
            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);
            }