コード例 #1
0
        public MigrationResult ExecuteMigration(string connectionString, string scriptFilePath)
        {
            // Generate C# DataContext using SqlMetal
            var sqlMetalConnectionStringArg = GetSqlMetalConnectionStringArg(connectionString);
            var generatedCSharpDataContext  = new LinqToSQLDataContextGenerator().GenerateDataContext_AndGetCSharpCode(connectionString, sqlMetalConnectionStringArg, dbmlManipulator);

            // Get LinqPad Script
            var linqpadCreator = new LinqPadCSharpCreator();
            var script         = linqpadCreator.Parse(scriptFilePath);

            // Add namespace for DataContext
            script.Namespaces.Add(LinqToSQLDataContextGenerator.DataContextNamespace);

            // Convert LinqPad Script to Executable Source Code
            var executableScript = linqpadCreator.MakeScriptExecutable(script, generatedCSharpDataContext);
            Action <Exception> logExceptionWithSourceCode = (ex) =>
            {
                string primarySourceCode = executableScript.SourceCodePieces.First();
                logger.ErrorException(scriptFilePath, ex);
                logger.Error(primarySourceCode);
            };

            // Create Compiler
            var             csharpProvider = new CSharpCodeProvider();
            IScriptCompiler compiler       = new CodeDomScriptCompiler(csharpProvider);

            Assembly assembly = null;

            try
            {
                // Compile Script > .NET Assembly
                assembly = compiler.Compile(executableScript.AssemblyReferences, executableScript.SourceCodePieces);
            }
            catch (Exception ex)
            {
                var myException = new MigrationException(new MigrationResult(scriptFilePath, false, new[] { "Failed to compile script." }, ex));
                logExceptionWithSourceCode(myException);
                throw myException;
            }

            IScriptExecutor executor = GetScriptExecutor(script);

            try
            {
                // Execute!
                var result = executor.Execute(assembly, scriptFilePath);
                return(result);
            }
            catch (MigrationException ex)
            {
                logExceptionWithSourceCode(ex);
                throw ex;
            }
            catch (Exception ex)
            {
                var myException = new MigrationException(new MigrationResult(scriptFilePath, false, new[] { "Failed to execute compiled script." }, ex));
                logExceptionWithSourceCode(myException);
                throw myException;
            }
        }
コード例 #2
0
        public void should_generate_linq_datacontext_with_connection_string_as_default_constructor()
        {
            var generator        = new LinqToSQLDataContextGenerator();
            var connectionString = CopyNorthwindDatabaseAndGetConnectionString();

            // Pull .SDF filename out of the connection string  (required for SQL Compact)
            var extractedSQLCompactFilename = connectionString.Replace("Data Source", "").Replace("=", "");
            var sqlMetalConnectionString    = string.Format("\"{0}\"", extractedSQLCompactFilename);

            // Generate DataContext
            var generatedDataContext = generator.GenerateDataContext_AndGetCSharpCode(connectionString, sqlMetalConnectionString, null);

            // Connection String should now be embedded into DataContext default constructor
            var defaultConstructorSignature = "public TypedDataContext() : this(@\"" + connectionString + "\")";

            Assert.IsTrue(generatedDataContext.Contains(defaultConstructorSignature));
        }