Beispiel #1
0
        private static void GenerateProject(DbProject project, string directoryPath)
        {
            var buffer = new StringBuilder(1024 * 80);

            foreach (var entity in project.CreateEntities())
            {
                // Classes
                var entityClass = project.CreateEntityClass(entity);
                buffer.AppendLine(entityClass);
                buffer.AppendLine(EntityClass.GenerateClassViewModel(entity, !project.IsModifiable(entity.Table)));
                buffer.AppendLine(project.CreateTableViewModel(entity));

                if (!project.IsModifiable(entity.Table))
                {
                    buffer.AppendLine(project.CreateTableViewModel(entity));
                }

                // Read Only adapters
                var adapter = !project.IsModifiable(entity.Table)
                    ? project.CreateEntityAdapter(entity)
                    : project.CreateEntityAdapter(entity);
                buffer.AppendLine(adapter);
            }

            var clrProject = new ClrProject();
            clrProject.WriteAllText = File.WriteAllText;
            clrProject.CreateDirectory = path =>
            {
                if (Directory.Exists(path))
                {
                    Directory.Delete(path, true);
                }
                Directory.CreateDirectory(path);
            };
            clrProject.Save(directoryPath, project);

            var tmp = DbScript.CreateTables(project.Schema.Tables);
            Console.WriteLine(tmp);
        }
Beispiel #2
0
        private void SaveTableViewModel(string directoryPath, DbProject project, Entity entity, string namespaceName)
        {
            var className = entity.Table.Name + @"ViewModel" + @".cs";
            var sourceCode = project.CreateTableViewModel(entity);

            var buffer = new StringBuilder(sourceCode.Length);
            AddUsingsForTableViewModels(namespaceName, buffer, !project.IsModifiable(entity.Table));
            AddNamespace(buffer, namespaceName, ViewModels, sourceCode);

            SaveToFile(directoryPath, className, buffer);
        }
Beispiel #3
0
        private void SaveModules(string directoryPath, DbProject project, Entity[] entities, string namespaceName)
        {
            foreach (var entity in entities)
            {
                if (project.IsHidden(entity.Table))
                {
                    continue;
                }

                var className = entity.Class.Name + @"Module" + @".cs";
                var sourceCode = project.CreateClassModule(entity);

                var buffer = new StringBuilder(sourceCode.Length);
                AddUsingsForModules(namespaceName, buffer, !project.IsModifiable(entity.Table));
                AddNamespace(buffer, namespaceName, Modules, sourceCode);

                SaveToFile(directoryPath, className, buffer);
            }
        }
Beispiel #4
0
        private void SaveHelpers(string directoryPath, DbProject project, Entity[] entities, string namespaceName)
        {
            foreach (var entity in entities)
            {
                // Create helpers only fore ReadOnly tables
                if (project.IsModifiable(entity.Table))
                {
                    continue;
                }

                var className = entity.Class.Name + @"Helper" + @".cs";
                var sourceCode = project.CreateEntityHelper(entity);

                var buffer = new StringBuilder(sourceCode.Length);
                AddUsingsForHelpers(buffer, namespaceName);
                AddNamespace(buffer, namespaceName, Helpers, sourceCode);

                SaveToFile(directoryPath, className, buffer);
            }
        }
Beispiel #5
0
        private void SaveAdapters(string directoryPath, DbProject project, Entity[] entities, string namespaceName)
        {
            foreach (var entity in entities)
            {
                var className = entity.Class.Name + @"Adapter" + @".cs";
                var sourceCode = project.CreateEntityAdapter(entity);

                var buffer = new StringBuilder(sourceCode.Length);
                AddUsingsForAdapters(buffer, entity, namespaceName, !project.IsModifiable(entity.Table));
                AddNamespace(buffer, namespaceName, Adapters, sourceCode);

                SaveToFile(directoryPath, className, buffer);
            }
        }
Beispiel #6
0
        private void AddUsingsForObjects(StringBuilder buffer, Entity entity, DbProject project)
        {
            var hasReferenceType = false;
            foreach (var clrProperty in entity.Class.Properties)
            {
                if (clrProperty.Type.IsReference)
                {
                    hasReferenceType = true;
                    break;
                }
            }
            if (hasReferenceType)
            {
                // For ArgumentNullException class
                buffer.AppendLine(@"using System;");
            }
            if (project.IsModifiable(entity.Table))
            {
                // For IDbObject interface
                buffer.AppendLine(@"using Cchbc.Objects;");
            }
            if (entity.InverseTable != null)
            {
                // For the List<T> class
                buffer.AppendLine(@"using System.Collections.Generic;");
            }

            // Separate usings from namespace if any usings
            var hasUsings = buffer.Length > 0;
            if (hasUsings)
            {
                buffer.AppendLine();
            }
        }