Example #1
0
        private static void WriteStoredProcedure(string procedures, string directoryPath, string @namespace, DatabaseStoredProcedure sproc, ProjectWriter pw)
        {
            //if no .net classname, don't process
            if (string.IsNullOrEmpty(sproc.NetName))
            {
                return;
            }

            var sw       = new SprocWriter(sproc, @namespace);
            var txt      = sw.Write();
            var fileName = sproc.NetName + ".cs";
            var path     = Path.Combine(directoryPath, fileName);

            File.WriteAllText(path, txt);
            pw.AddClass(procedures + @"\" + fileName);
            if (sw.RequiresOracleReference)
            {
                pw.AddOracleReference();
            }

            if (sw.HasResultClass)
            {
                var rs = new SprocResultWriter(sproc, @namespace);
                txt      = rs.Write();
                fileName = rs.ClassName + ".cs";
                path     = Path.Combine(directoryPath, fileName);
                File.WriteAllText(path, txt);
                pw.AddClass(procedures + @"\" + fileName);
            }
        }
Example #2
0
        private void WriteMapping(DatabaseTable table, ProjectWriter pw)
        {
            string fileName;

            switch (_codeWriterSettings.CodeTarget)
            {
            case CodeTarget.PocoNHibernateFluent:
                fileName = WriteFluentMapping(table);
                pw.AddClass(@"Mapping\" + fileName);
                break;

            case CodeTarget.PocoNHibernateHbm:
                var mw  = new MappingWriter(table, _codeWriterSettings);
                var txt = mw.Write();

                fileName = table.NetName + ".hbm.xml";
                var path = Path.Combine(_mappingPath, fileName);
                File.WriteAllText(path, txt);
                pw.AddMap(@"mapping\" + fileName);
                break;

            case CodeTarget.PocoEntityCodeFirst:
            case CodeTarget.PocoRiaServices:
                var cfmw  = new CodeFirstMappingWriter(table, _codeWriterSettings, _mappingNamer);
                var cfmap = cfmw.Write();

                fileName = cfmw.MappingClassName + ".cs";

                var filePath = Path.Combine(_mappingPath, fileName);
                File.WriteAllText(filePath, cfmap);
                pw.AddClass(@"Mapping\" + fileName);
                break;
            }
        }
Example #3
0
        private string WriteDbContext(FileSystemInfo directory, ProjectWriter projectWriter)
        {
            var writer = new CodeFirstContextWriter(_codeWriterSettings);

            if (ProviderToSqlType.Convert(_schema.Provider) == SqlType.Oracle)
            {
                writer.IsOracle = true;
                projectWriter.AddDevartOracleReference();
            }
            var databaseTables = _schema.Tables.Where(t => !FilterIneligible(t))
                                 .ToList();

            if (_codeWriterSettings.IncludeViews)
            {
                databaseTables.AddRange(_schema.Views.OfType <DatabaseTable>());
            }
            var txt      = writer.Write(databaseTables);
            var fileName = writer.ContextName + ".cs";

            File.WriteAllText(
                Path.Combine(directory.FullName, fileName),
                txt);
            projectWriter.AddClass(fileName);
            return(writer.ContextName);
        }
Example #4
0
        private void WriteMapping(DatabaseTable table, ProjectWriter pw)
        {
            string fileName;
            switch (_codeWriterSettings.CodeTarget)
            {
                case CodeTarget.PocoNHibernateFluent:
                    fileName = WriteFluentMapping(table);
                    pw.AddClass(@"Mapping\" + fileName);
                    break;
                case CodeTarget.PocoNHibernateHbm:
                    //TPT subclasses are mapped in base class
                    if (table.FindInheritanceTable() != null) return;
                    var mw = new MappingWriter(table, _codeWriterSettings);
                    var txt = mw.Write();

                    fileName = table.NetName + ".hbm.xml";
                    var path = Path.Combine(_mappingPath, fileName);
                    File.WriteAllText(path, txt);
                    pw.AddMap(@"mapping\" + fileName);
                    break;
                case CodeTarget.PocoEntityCodeFirst:
                case CodeTarget.PocoRiaServices:
                    case CodeTarget.PocoEfCore:
                    var cfmw = new CodeFirstMappingWriter(table, _codeWriterSettings, _mappingNamer);
                    var cfmap = cfmw.Write();

                    fileName = cfmw.MappingClassName + ".cs";

                    var filePath = Path.Combine(_mappingPath, fileName);
                    File.WriteAllText(filePath, cfmap);
                    pw.AddClass(@"Mapping\" + fileName);
                    break;
            }
        }
Example #5
0
 private string WriteDbContext(FileSystemInfo directory, ProjectWriter projectWriter)
 {
     var writer = new CodeFirstContextWriter(_codeWriterSettings);
     if (ProviderToSqlType.Convert(_schema.Provider) == SqlType.Oracle)
     {
         writer.IsOracle = true;
         projectWriter.AddDevartOracleReference();
     }
     var databaseTables = _schema.Tables.Where(t => !FilterIneligible(t))
         .ToList();
     if (_codeWriterSettings.IncludeViews)
     {
         databaseTables.AddRange(_schema.Views.OfType<DatabaseTable>());
     }
     var txt = writer.Write(databaseTables);
     var fileName = writer.ContextName + ".cs";
     File.WriteAllText(
         Path.Combine(directory.FullName, fileName),
         txt);
     projectWriter.AddClass(fileName);
     return writer.ContextName;
 }
Example #6
0
        private static void WriteStoredProcedure(string procedures, string directoryPath, string @namespace, DatabaseStoredProcedure sproc, ProjectWriter pw)
        {
            //if no .net classname, don't process
            if (string.IsNullOrEmpty(sproc.NetName)) return;

            var sw = new SprocWriter(sproc, @namespace);
            var txt = sw.Write();
            var fileName = sproc.NetName + ".cs";
            var path = Path.Combine(directoryPath, fileName);
            File.WriteAllText(path, txt);
            pw.AddClass(procedures + @"\" + fileName);
            if (sw.RequiresOracleReference)
            {
                if (sw.RequiresDevartOracleReference)
                    pw.AddDevartOracleReference();
                else
                    pw.AddOracleReference();
            }

            if (sw.HasResultClass)
            {
                var rs = new SprocResultWriter(sproc, @namespace);
                txt = rs.Write();
                fileName = rs.ClassName + ".cs";
                path = Path.Combine(directoryPath, fileName);
                File.WriteAllText(path, txt);
                pw.AddClass(procedures + @"\" + fileName);
            }
        }
Example #7
0
        /// <summary>
        /// Uses the specified schema to write class files, NHibernate/EF CodeFirst mapping and a project file. Any existing files are overwritten. If not required, simply discard the mapping and project file. Use these classes as ViewModels in combination with the data access strategy of your choice.
        /// </summary>
        /// <param name="directory">The directory to write the files to. Will create a subdirectory called "mapping". The directory must exist- any files there will be overwritten.</param>
        /// <exception cref="ArgumentNullException"/>
        /// <exception cref="InvalidOperationException"/>
        /// <exception cref="IOException"/>
        /// <exception cref="UnauthorizedAccessException"/>
        /// <exception cref="SecurityException" />
        public void Execute(DirectoryInfo directory)
        {
            if (directory == null)
            {
                throw new ArgumentNullException("directory");
            }
            if (!directory.Exists)
            {
                throw new InvalidOperationException("Directory does not exist");
            }

            var pw = new ProjectWriter(_codeWriterSettings.Namespace);

            InitMappingProjects(directory, pw);
            _mappingNamer = new MappingNamer();

            foreach (var table in _schema.Tables)
            {
                if (FilterIneligible(table))
                {
                    continue;
                }
                var className = table.NetName;
                UpdateEntityNames(className, table.Name);

                var cw  = new ClassWriter(table, _codeWriterSettings);
                var txt = cw.Write();

                var fileName = WriteClassFile(directory, className, txt);
                pw.AddClass(fileName);

                WriteMapping(table, pw);
            }

            if (_codeWriterSettings.IncludeViews)
            {
                foreach (var view in _schema.Views)
                {
                    var className = view.NetName;
                    UpdateEntityNames(className, view.Name);

                    var cw  = new ClassWriter(view, _codeWriterSettings);
                    var txt = cw.Write();

                    var fileName = WriteClassFile(directory, className, txt);
                    pw.AddClass(fileName);

                    WriteMapping(view, pw);
                }
            }


            string contextName = null;

            if (IsCodeFirst())
            {
                contextName = WriteDbContext(directory, pw);
            }

            //we could write functions (at least scalar functions- not table value functions)
            //you have to check the ReturnType (and remove it from the arguments collections).
            if (_codeWriterSettings.WriteStoredProcedures)
            {
                WriteStoredProcedures(directory.FullName, pw);
                WritePackages(directory.FullName, pw);
            }
            if (_codeWriterSettings.WriteUnitTest)
            {
                WriteUnitTest(directory.FullName, contextName);
            }

            WriteProjectFile(directory, pw);
        }