Beispiel #1
0
        private void BindUnit(IEnumerable <UnitRow> units, IEnumerable <SpecRow> specs, Unit parent, int?parentId)
        {
            var rows = units.Where(n => n.ParentId == parentId);

            foreach (var unitRow in rows)
            {
                Unit unit = new Unit(unitRow.Key, unitRow.Name);
                foreach (var specRow in specs.Where(n => n.Id == unitRow.Id))
                {
                    Specs.Specification spec = null;
                    switch (specRow.Type)
                    {
                    case Specs.SpecificationType.Boolean:
                        spec = new Specs.BooleanSpecification();
                        break;

                    case Specs.SpecificationType.Required:
                        spec = new Specs.RequiredSpecification();
                        break;

                    case Specs.SpecificationType.Composite:
                        spec = new Specs.CompositeSpecification(specRow.GetMin <int>(), specRow.GetMax <int>());
                        break;

                    case Specs.SpecificationType.Integer:
                        spec = new Specs.IntegerSpecification(specRow.GetMin <int>(), specRow.GetMax <int>());
                        break;

                    case Specs.SpecificationType.String:
                        spec = new Specs.StringSpecification(specRow.GetMin <int>(), specRow.GetMax <int>());
                        break;

                    case Specs.SpecificationType.DateTime:
                        spec = new Specs.DateTimeSpecification(specRow.GetMin <DateTime>(), specRow.GetMax <DateTime>());
                        break;

                    case Specs.SpecificationType.Decimal:
                        spec = new Specs.DecimalSpecification(specRow.GetMin <decimal>(), specRow.GetMax <decimal>());
                        break;

                    case Specs.SpecificationType.Lookup:
                        spec = new Specs.LookupSpecification(specRow.Options.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries).ToList());
                        break;
                    }
                    unit.AddSpecification(spec);
                }
                parent.AddChild(unit);
                BindUnit(units, specs, unit, unitRow.Id);
            }
        }
Beispiel #2
0
        private static void SaveSpec <T>(MySqlConnection connection, Guid unitId, int id, int specId, Specs.Specification spec,
                                         T min = default(T), T max = default(T), string options = null)
        {
            connection.Execute(
                @"INSERT INTO `unno_unit_specs`(`UnitId`, `Id`, `SpecId`, `Type`, `Min`, `Max`, `Options`) 
VALUES (@UnitId, @Id, @SpecId, @Type, @Min, @Max, @Options);",
                new
            {
                UnitId  = unitId,
                Id      = id,
                SpecId  = specId,
                Type    = spec.Type,
                Min     = min,
                Max     = max,
                Options = options
            });
        }