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); } }
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 }); }