private void GenerateFactory(CSharpConfig config) { string path = Path.Combine(config.FactoryPath); string file = $"Register.Auto.cs"; var nameSpace = new List<string> { "XCommon.Patterns.Ioc", "XCommon.Patterns.Specification.Validation", "XCommon.Patterns.Specification.Query" }; config.DataBaseItems.ForEach(group => { nameSpace.Add($"{config.ContractNameSpace}.{group.Name}"); nameSpace.Add($"{config.ConcreteNameSpace}.{group.Name}"); nameSpace.Add($"{config.ConcreteNameSpace}.{group.Name}.Query"); nameSpace.Add($"{config.ConcreteNameSpace}.{group.Name}.Validate"); nameSpace.Add($"{config.EntrityNameSpace}.{group.Name}"); nameSpace.Add($"{config.EntrityNameSpace}.{group.Name}.Filter"); nameSpace.Add($"{config.DataBase.NameSpace}.{group.Name}"); }); StringBuilderIndented builder = new StringBuilderIndented(); builder .ClassInit("Register", null, $"{config.FacotryNameSpace}", ClassVisility.Public, true, nameSpace.ToArray()) .AppendLine("public static void Do(bool unitTest = false)") .AppendLine("{") .IncrementIndent() .AppendLine("RegisterRepository();") .AppendLine("RegisterValidate();") .AppendLine("RegisterQuery();") .AppendLine("RegisterCustom(unitTest);") .DecrementIndent() .AppendLine("}") .AppendLine(); GenerateFactoryRepository(config, builder); GenerateFactoryQuery(config, builder); GenerateFactoryValidate(config, builder); builder .ClassEnd(); WriteFile(path, file, builder); }
private void GenerateEntity(CSharpConfig config) { foreach (var group in config.DataBaseItems) { foreach (var item in group.Items) { string path = Path.Combine(config.DataBase.Path, group.Name); string file = $"{item.Name}.cs"; var nameSpace = new List<string> { "System", "System.Collections.Generic" }; nameSpace.AddRange(item.Relationships.Where(c => c.ItemGroupFK != group.Name).Select(c => $"{config.DataBase.NameSpace}.{c.ItemGroupFK}").Distinct()); nameSpace.AddRange(item.Relationships.Where(c => c.ItemGroupPK != group.Name).Select(c => $"{config.DataBase.NameSpace}.{c.ItemGroupPK}").Distinct()); nameSpace.AddRange(item.Properties.Where(c => c.NameGroup != group.Name).Select(c => c.NameGroup)); StringBuilderIndented builder = new StringBuilderIndented(); builder .GenerateFileMessage() .ClassInit(item.Name, null, $"{config.DataBase.NameSpace}.{group.Name}", ClassVisility.Public, nameSpace.ToArray()); foreach (var property in item.Properties) { builder .AppendLine($"public {property.Type} {property.Name} {{ get; set; }}") .AppendLine(); } foreach (var relationShip in item.Relationships.Where(c => c.RelationshipType == ItemRelationshipType.Single)) { string relationShipName = ProcessRelationShipName(config, relationShip, relationShip.ItemPK); builder .AppendLine($"public virtual {relationShip.ItemPK} {relationShipName} {{ get; set; }}") .AppendLine(); } foreach (var relationShip in item.Relationships.Where(c => c.RelationshipType == ItemRelationshipType.Many)) { string relationShipName = ProcessRelationShipName(config, relationShip, relationShip.ItemFK); builder .AppendLine($"public virtual ICollection<{relationShip.ItemFK}> {relationShipName} {{ get; set; }}") .AppendLine(); } builder .ClassEnd(); WriteFile(path, file, builder); } } }