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);");
 }
Exemple #2
0
        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();
        }
Exemple #4
0
        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);
        }
Exemple #5
0
 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);
         }
     }
 }
Exemple #6
0
 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);
 }
Exemple #7
0
 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");
         }
     }
 }
Exemple #9
0
        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);
         }
     }
 }
Exemple #11
0
        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);
                }
            }
        }
Exemple #12
0
        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();
 }
Exemple #14
0
 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");
 }
Exemple #15
0
 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");
 }
Exemple #16
0
        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);
                }
            });
        }
Exemple #17
0
        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();
 }
Exemple #19
0
        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();
        }
Exemple #20
0
        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);
                }
            });
        }
Exemple #21
0
 protected virtual void AddGetByParentId(XmlEntity xmlEntity, ITobascoContext tobascoContext)
 {
 }
Exemple #22
0
 public abstract void Scaffold(XmlEntity xmlEntity, ITobascoContext tobascoContext, string appRoot);
Exemple #23
0
 internal override void AddUsingNamespaces(XmlEntity entityContext, ITobascoContext tobascoContext)
 {
     base.AddUsingNamespaces(entityContext, tobascoContext);
 }
Exemple #24
0
 internal override void AddClass(XmlEntity entityContext, ITobascoContext tobascoContext)
 {
     Builder.StartInterface($"I{entityContext.Name}Repository");
 }
Exemple #25
0
 protected virtual void AddDelete(XmlEntity xmlEntity, ITobascoContext tobascoContext)
 {
 }
Exemple #26
0
 protected virtual void AddConstraints(XmlEntity xmlEntity, ITobascoContext tobascoContext)
 {
 }
Exemple #27
0
 protected virtual void AddIndexes(XmlEntity xmlEntity, ITobascoContext tobascoContext)
 {
 }
Exemple #28
0
 protected virtual void AddTriggers(XmlEntity xmlEntity, ITobascoContext tobascoContext)
 {
 }
Exemple #29
0
 protected virtual void AddHistoryTable(XmlEntity xmlEntity, ITobascoContext tobascoContext)
 {
 }
Exemple #30
0
 protected virtual void AddGetByReferenceId(XmlEntity xmlEntity, ITobascoContext tobascoContext)
 {
 }