protected override void AddConstraints(XmlEntity xmlEntity, ITobascoContext tobascoContext) { Builder.AppendLine($"CREATE NONCLUSTERED INDEX IX_{xmlEntity.Name}_historie_Id"); Builder.AppendLine($"ON[dbo].{xmlEntity.Name}_historie"); Builder.AppendLine("(Id ASC)"); Builder.AppendLine("INCLUDE(ModifiedOn);"); }
internal override void AddMethods(XmlEntity entityContext, ITobascoContext tobascoContext) { var entityParameter = entityContext.Name.GetParameterName(); Builder.StartMethod("public", entityContext.Name, "Save", entityContext.Name.GetObjectWithParamaterName()); foreach (var child in entityContext.GetChilds()) { Builder.AddMethodBody($"if (var {entityContext.Name}.{child.Name} != null)"); Builder.AddMethodBody("{"); Builder.AppendLine($"{entityContext.Name}.{child.Name} = {child.Name.GetFieldName()}.Save({child.Name});", Indent.ForEachBody); Builder.AddMethodBody("}"); } Builder.AddMethodBody($"{entityParameter} = _genericRepository.Save({entityParameter});"); foreach (var childCollection in entityContext.GetChildCollections()) { Builder.AddMethodBody($"foreach (var itemToSave = {entityContext.Name}.{childCollection.Name})"); Builder.AddMethodBody("{"); Builder.AppendLine($"itemToSave.{entityContext.Name}Id = {entityContext.Name.GetObjectWithParamaterName()};", Indent.ForEachBody); Builder.AppendLine($"{childCollection.Name.GetParameterName()}.Save(itemToSave);", Indent.ForEachBody); Builder.AddMethodBody("}"); } Builder.AddMethodBody($"return {entityParameter};"); Builder.EndMethod(); Builder.AppendLine(string.Empty); Builder.StartMethod("public", entityContext.Name, "GetById", "long id"); Builder.AddMethodBody("return _genericRepository.GetById(id);"); Builder.EndMethod(); }
protected override void AddTriggers(XmlEntity xmlEntity, ITobascoContext tobascoContext) { Builder.StartUpdateTrigger(xmlEntity.Name); Builder.AddTriggerBody("Id"); Builder.Append <SqlStringBuilder>(",").AddTriggerBody("[RowVersion]"); foreach (var prop in xmlEntity.Properties.Where(x => x.PropertyType.Name != Enums.Datatype.ChildCollection)) { Builder.Append <SqlStringBuilder>(",").AddTriggerBody(prop.Name.GetParameterName()); } Builder.Append <SqlStringBuilder>(",").AddTriggerBody("ModifiedBy"); Builder.Append <SqlStringBuilder>(",").AddTriggerBody("ModifiedOn"); Builder.Append <SqlStringBuilder>(",").AddTriggerBody("ModifiedOnUTC"); Builder.Append <SqlStringBuilder>(",").AddTriggerBody("DeletedBy"); Builder.Append <SqlStringBuilder>(",").AddTriggerBody("DeletedAt"); Builder.AddTriggerBody(")"); Builder.AddTriggerBody("SELECT"); Builder.AddTriggerBody("Deleted.Id"); Builder.Append <SqlStringBuilder>(",").AddTriggerBody("Deleted.[RowVersion]"); foreach (var prop in xmlEntity.Properties.Where(x => x.PropertyType.Name != Enums.Datatype.ChildCollection)) { Builder.Append <SqlStringBuilder>(",").AddTriggerBody($"Deleted.{prop.Name.GetParameterName()}"); } Builder.Append <SqlStringBuilder>(",").AddTriggerBody("Deleted.ModifiedBy"); Builder.Append <SqlStringBuilder>(",").AddTriggerBody("Deleted.ModifiedOn"); Builder.Append <SqlStringBuilder>(",").AddTriggerBody("Deleted.ModifiedOnUTC"); Builder.Append <SqlStringBuilder>(",").AddTriggerBody("NULL"); Builder.Append <SqlStringBuilder>(",").AddTriggerBody("NULL"); Builder.AddTriggerBody("FROM Deleted;"); Builder.EndTrigger(); Builder.StartDeleteTrigger(xmlEntity.Name); Builder.AddTriggerBody("Id"); Builder.Append <SqlStringBuilder>(",").AddTriggerBody("[RowVersion]"); foreach (var prop in xmlEntity.Properties.Where(x => x.PropertyType.Name != Enums.Datatype.ChildCollection)) { Builder.Append <SqlStringBuilder>(",").AddTriggerBody(prop.Name.GetParameterName()); } Builder.Append <SqlStringBuilder>(",").AddTriggerBody("ModifiedBy"); Builder.Append <SqlStringBuilder>(",").AddTriggerBody("ModifiedOn"); Builder.Append <SqlStringBuilder>(",").AddTriggerBody("ModifiedOnUTC"); Builder.Append <SqlStringBuilder>(",").AddTriggerBody("DeletedBy"); Builder.Append <SqlStringBuilder>(",").AddTriggerBody("DeletedAt"); Builder.AddTriggerBody(")"); Builder.AddTriggerBody("SELECT"); Builder.AddTriggerBody("Deleted.Id"); Builder.Append <SqlStringBuilder>(",").AddTriggerBody("Deleted.[RowVersion]"); foreach (var prop in xmlEntity.Properties.Where(x => x.PropertyType.Name != Enums.Datatype.ChildCollection)) { Builder.Append <SqlStringBuilder>(",").AddTriggerBody($"Deleted.{prop.Name.GetParameterName()}"); } Builder.Append <SqlStringBuilder>(",").AddTriggerBody("Deleted.ModifiedBy"); Builder.Append <SqlStringBuilder>(",").AddTriggerBody("Deleted.ModifiedOn"); Builder.Append <SqlStringBuilder>(",").AddTriggerBody("Deleted.ModifiedOnUTC"); Builder.Append <SqlStringBuilder>(",").AddTriggerBody("ISNULL(LTRIM(RTRIM(CONVERT(varchar(128), CONTEXT_INFO()))), CAST(SUSER_SNAME() AS varchar(128)))"); Builder.Append <SqlStringBuilder>(",").AddTriggerBody("SYSDATETIME()"); Builder.AddTriggerBody("FROM Deleted;"); Builder.EndTrigger(); }
public void Build(IDictionary <string, string> commandParameters) { Assembly assembly = BuilderParameterHelper.GetAssembly(commandParameters); ITobascoContext context = BuilderParameterHelper.GetContext(assembly, commandParameters); IEnumerable <string> entities = BuilderParameterHelper.GetEntities(commandParameters); var appRoot = assembly?.GetAppRoot(); ScaffoldXmls(entities, context, appRoot); }
private void ScaffoldXmls(IEnumerable <string> entities, ITobascoContext tobascoContext, string appRoot) { foreach (var entity in entities) { using (var reader = new StreamReader(entity)) { var entityScaffolder = new EntityScaffolder(); entityScaffolder.Scaffold((XmlEntity)_entityserializer.Deserialize(reader), tobascoContext, appRoot); } } }
internal override void AddMethods(XmlEntity entityContext, ITobascoContext tobascoContext) { Builder.StartMethod("public override", "ExpandoObject", "ToAnonymous"); Builder.AddMethodBody("dynamic anymonous = base.ToAnonymous();"); entityContext.Properties.ForEach(property => { Builder.AddMethodBody($"anymonous.{property.Name} = {property.Name};"); }); Builder.AddMethodBody("return anymonous"); Builder.EndMethod(); Builder.AppendLine(string.Empty); }
private static string GetBaseClass(XmlEntity entityContext, ITobascoContext tobascoContext) { if (string.IsNullOrEmpty(entityContext.BaseClass) && string.IsNullOrEmpty(tobascoContext.BaseClass)) { return(string.Empty); } else if (string.IsNullOrEmpty(entityContext.BaseClass)) { return(tobascoContext.BaseClass); } return(entityContext.BaseClass); }
protected virtual void AddDescriptions(XmlEntity xmlEntity, ITobascoContext tobascoContext) { Builder.AppendLine($"EXEC sp_addextendedproperty N'Description', '{xmlEntity.Name}', 'SCHEMA', N'dbo', 'TABLE', N'{xmlEntity.Name}', NULL, NULL"); Builder.AppendLine("GO"); foreach (var prop in xmlEntity.Properties) { if (!string.IsNullOrEmpty(prop.Description)) { Builder.AppendLine($"EXEC sp_addextendedproperty N'Description', '{prop.Name}', 'SCHEMA', N'dbo', 'TABLE', N'{prop.Description}', NULL, NULL"); Builder.AppendLine("GO"); } } }
internal override void AddFields(XmlEntity entityContext, ITobascoContext tobascoContext) { var lastProperty = entityContext.Properties.Last(); entityContext.Properties.ForEach(property => { Builder.AppendLine($"private {property.PropertyType.Name.GetDescription()} {property.GetFieldName()}"); if (property.Equals(lastProperty)) { Builder.AppendLine(string.Empty); } }); }
private void ScaffoldXmls(IEnumerable <string> entities, ITobascoContext tobascoContext, string appRoot) { foreach (var entity in entities) { using (var reader = new StreamReader(entity)) { var item = (XmlEntity)_entityserializer.Deserialize(reader); var repositoryScaffolder = new DapperRepositoryScaffolder(); repositoryScaffolder.Scaffold(item, tobascoContext, appRoot); var iRepositoryScaffolder = new DapperIRepositoryScaffolder(); iRepositoryScaffolder.Scaffold(item, tobascoContext, appRoot); } } }
private void ScaffoldXmls(IEnumerable <string> entities, ITobascoContext tobascoContext, string appRoot) { foreach (var entity in entities) { using (var reader = new StreamReader(entity)) { var item = (XmlEntity)_entityserializer.Deserialize(reader); var scaffolder = new DapperTableScaffolder(); scaffolder.Scaffold(item, tobascoContext, appRoot); var scaffolderStp = new DapperStoredProcedureScaffolder(); scaffolderStp.Scaffold(item, tobascoContext, appRoot); } } }
public override void Scaffold(XmlEntity entityContext, ITobascoContext tobascoContext, string appRoot) { AddUsingNamespaces(entityContext, tobascoContext); Builder.StartNamesspace(tobascoContext.EntityContext.EntityLocation.GetNamespace()); AddClass(entityContext, tobascoContext); Builder.EndNamespace(); CreateOrOverwriteFile( $"{appRoot}//" + $"{FileLocationHelper.GetFileLocation(entityContext.EntityLocation, tobascoContext.EntityContext.EntityLocation)}//" + $"{entityContext.Name}.cs"); }
protected override void AddHistoryTable(XmlEntity xmlEntity, ITobascoContext tobascoContext) { Builder.StartTable($"{xmlEntity.Name}_historie"); Builder.AddTableBody("[Id]", "bigint", true); Builder.Append <SqlStringBuilder>(",").AddTableBody("[RowVersion]", "binary(8)", true); foreach (var prop in xmlEntity.Properties.Where(x => x.PropertyType.Name != Enums.Datatype.ChildCollection)) { Builder.Append <SqlStringBuilder>(",").AddTableBody($"{prop.Name}", prop.PropertyType.GetSqlDataType(), prop.Required); } Builder.Append <SqlStringBuilder>(",").AddModifiedByTableDefinition(); Builder.Append <SqlStringBuilder>(",").AddModifiedOnTableDefinition(); Builder.Append <SqlStringBuilder>(",").AddModifiedOnUTCTableDefinition(); Builder.Append <SqlStringBuilder>(",").AddTableBody("[DeletedBy]", "nvarchar(256)", false); Builder.Append <SqlStringBuilder>(",").AddTableBody("[DeletedAt]", "datetime2(7)", false); Builder.EndTable(); }
public override void Scaffold(XmlEntity xmlEntity, ITobascoContext tobascoContext, string appRoot) { AddInsert(xmlEntity, tobascoContext); Builder.AppendLine("GO"); AddUpdate(xmlEntity, tobascoContext); Builder.AppendLine("GO"); AddDelete(xmlEntity, tobascoContext); Builder.AppendLine("GO"); AddGetById(xmlEntity, tobascoContext); Builder.AppendLine("GO"); AddGetByParentId(xmlEntity, tobascoContext); Builder.AppendLine("GO"); CreateOrOverwriteFile( $"{appRoot}//" + $"{FileLocationHelper.GetFileLocation(xmlEntity.DatabaseContext.StoredProcedureLocation, tobascoContext.DatabaseContext.StoredProcedureLocation)}//" + $"{xmlEntity.Name}.sql"); }
public override void Scaffold(XmlEntity xmlEntity, ITobascoContext tobascoContext, string appRoot) { AddTable(xmlEntity, tobascoContext); Builder.AppendLine("GO"); AddIndexes(xmlEntity, tobascoContext); Builder.AppendLine("GO"); AddConstraints(xmlEntity, tobascoContext); Builder.AppendLine("GO"); AddHistoryTable(xmlEntity, tobascoContext); Builder.AppendLine("GO"); AddTriggers(xmlEntity, tobascoContext); Builder.AppendLine("GO"); AddDescriptions(xmlEntity, tobascoContext); CreateOrOverwriteFile( $"{appRoot}//" + $"{FileLocationHelper.GetFileLocation(xmlEntity.DatabaseContext.TableLocation, tobascoContext.DatabaseContext.TableLocation)}//" + $"{xmlEntity.Name}.sql"); }
internal override void AddProperties(XmlEntity entityContext, ITobascoContext tobascoContext) { var lastProperty = entityContext.Properties.Last(); entityContext.Properties.ForEach(property => { if (tobascoContext.AddBusinessRules) { Builder.AddPropertyWithBusinessRule("public", property); } else { Builder.AddProperty("public", property); } if (!property.Equals(lastProperty)) { Builder.AppendLine(string.Empty); } }); }
internal override void AddConstructor(XmlEntity entityContext, ITobascoContext tobascoContext) { var childs = entityContext.GetChilds().Concat(entityContext.GetChildCollections()); Builder.StartConstructor(entityContext.Name, GetConstructorParameters(childs).ToArray()); Builder.AddConstructorBody("_genericRepository = genericRepository;"); foreach (var child in childs) { Builder.AddConstructorBody($"{child.Name.GetFieldName()} = {child.Name.GetParameterName()};"); } Builder.EndConstructor(); IEnumerable <string> GetConstructorParameters(IEnumerable <XmlProperty> childProperties) { var parameters = new List <string> { "IGenericRepository genericRepository" }; parameters.AddRange(childProperties.Select(x => $"I{x.Name}Repository {x.Name.GetParameterName()}")); return(parameters); } }
protected override void AddTable(XmlEntity xmlEntity, ITobascoContext tobascoContext) { Builder.StartTable(xmlEntity.Name); Builder.AddTableBody("[Id]", "bigint IDENTITY(1,1)", true); Builder.Append <SqlStringBuilder>(",").AddTableBody("[RowVersion]", "rowversion", true); foreach (var prop in xmlEntity.Properties.Where(x => x.PropertyType.Name != Enums.Datatype.ChildCollection)) { Builder.Append <SqlStringBuilder>(",").AddTableBody(prop.Name, prop.PropertyType.GetSqlDataType(), prop.Required); } Builder.Append <SqlStringBuilder>(",").AddModifiedByTableDefinition(); Builder.Append <SqlStringBuilder>(",").AddModifiedByTableConstraint(); Builder.Append <SqlStringBuilder>(",").AddModifiedOnTableDefinition(); Builder.Append <SqlStringBuilder>(",").AddModifiedOnTableConstraint(); Builder.Append <SqlStringBuilder>(",").AddModifiedOnUTCTableDefinition(); Builder.Append <SqlStringBuilder>(",").AddModifiedOnUTCTableConstraint(); Builder.Append <SqlStringBuilder>(",").AppendLine($"CONSTRAINT [PK_{xmlEntity.Name}] PRIMARY KEY CLUSTERED (Id ASC)"); foreach (var child in xmlEntity.GetChilds()) { Builder.Append <SqlStringBuilder>(",").AppendLine($"CONSTRAINT [FK_{xmlEntity.Name}_{child.Name}] PRIMARY KEY CLUSTERED (Id ASC)"); } Builder.EndTable(); }
internal virtual void AddClass(XmlEntity entityContext, ITobascoContext tobascoContext) { string baseClass = GetBaseClass(entityContext, tobascoContext); if (entityContext.IsAbstract) { if (string.IsNullOrEmpty(baseClass)) { Builder.StartAbstractClass(entityContext.Name); } else { Builder.StartAbstractClass(entityContext.Name, baseClass); } } else { if (string.IsNullOrEmpty(baseClass)) { Builder.StartClass(entityContext.Name); } else { Builder.StartClass(entityContext.Name, baseClass); } } AddFields(entityContext, tobascoContext); AddConstructor(entityContext, tobascoContext); AddProperties(entityContext, tobascoContext); AddMethods(entityContext, tobascoContext); Builder.EndClass(); }
internal override void AddProperties(XmlEntity entityContext, ITobascoContext tobascoContext) { var lastProperty = entityContext.Properties.Last(); entityContext.Properties.ForEach(property => { if (tobascoContext.AddBusinessRules) { Builder.StartPropertyWithBusinessRules("public", property); Builder.AddPropertyBody($"get {{ return {property.GetFieldName()}; }}"); Builder.AddPropertyBody($"set {{ SetField(ref {property.GetFieldName()}, value, nameof({property.Name})); }}"); Builder.EndProperty(); } else { Builder.StartProperty("public", property); Builder.EndProperty(); } if (!property.Equals(lastProperty)) { Builder.AppendLine(string.Empty); } }); }
protected virtual void AddGetByParentId(XmlEntity xmlEntity, ITobascoContext tobascoContext) { }
public abstract void Scaffold(XmlEntity xmlEntity, ITobascoContext tobascoContext, string appRoot);
internal override void AddUsingNamespaces(XmlEntity entityContext, ITobascoContext tobascoContext) { base.AddUsingNamespaces(entityContext, tobascoContext); }
internal override void AddClass(XmlEntity entityContext, ITobascoContext tobascoContext) { Builder.StartInterface($"I{entityContext.Name}Repository"); }
protected virtual void AddDelete(XmlEntity xmlEntity, ITobascoContext tobascoContext) { }
protected virtual void AddConstraints(XmlEntity xmlEntity, ITobascoContext tobascoContext) { }
protected virtual void AddIndexes(XmlEntity xmlEntity, ITobascoContext tobascoContext) { }
protected virtual void AddTriggers(XmlEntity xmlEntity, ITobascoContext tobascoContext) { }
protected virtual void AddHistoryTable(XmlEntity xmlEntity, ITobascoContext tobascoContext) { }
protected virtual void AddGetByReferenceId(XmlEntity xmlEntity, ITobascoContext tobascoContext) { }