Elmah DDL дает sql ошибки при запуске context.Database.ExecuteSqlCommand (EF4.1) - PullRequest
4 голосов
/ 30 марта 2011

Я пытаюсь запустить DDL Elmah Sql Server при создании базы данных в моем приложении EF4.1 CodeFirst.

Для этого в моем DbInitializer.Seed методе у меня есть:

    protected override void Seed(MyJobLeadsDbContext context)
    {
        // Run Elmah scripts
        context.Database.ExecuteSqlCommand(GetElmahDDLSql);
    }

GetElmahDDLSql - это просто строковая константа, которая содержит весь DDL от http://code.google.com/p/elmah/source/browse/trunk/src/Elmah/SQLServer.sql

К сожалению, при запуске я получаю следующее исключение:

Exception Details: System.Data.SqlClient.SqlException: Incorrect syntax near 'GO'.
Incorrect syntax near the keyword 'ALTER'.
Incorrect syntax near the keyword 'ALTER'.
Incorrect syntax near 'GO'.
Incorrect syntax near the keyword 'SET'.
Incorrect syntax near 'GO'.
Incorrect syntax near 'GO'.
Must declare the scalar variable "@ErrorId".
Incorrect syntax near 'GO'.
Incorrect syntax near 'GO'.
Incorrect syntax near 'GO'.
Incorrect syntax near 'GO'.
Must declare the scalar variable "@TotalCount".
Must declare the scalar variable "@PageIndex".
Must declare the scalar variable "@TotalCount".
Must declare the scalar variable "@Application".
Must declare the scalar variable "@PageSize".
Must declare the scalar variable "@PageSize".
Must declare the scalar variable "@Application".
Incorrect syntax near 'GO'.
Incorrect syntax near 'GO'.
Incorrect syntax near 'GO'.
Incorrect syntax near 'GO'.
Must declare the scalar variable "@ErrorId".
Incorrect syntax near 'GO'.
Incorrect syntax near 'GO'.

Любая идеякак правильно выполнить DDL через EF4.1?

1 Ответ

5 голосов
/ 30 марта 2011

Как я знаю, вы не можете использовать GO.GO - это не команда SQL, это специальная команда пакетного управления для таких инструментов, как SQLCMD, OSQL или редактор запросов в SSMS.При использовании ADO.NET или EF вы должны разделить ваш SQL-скрипт на команды и выполнить каждую часть отдельно = каждая часть между двумя GO - это отдельная команда, для которой требуется свой ExecuteSqlCommand.Могут быть некоторые проблемы с глобальными переменными в скрипте.

Другой подход заключается в использовании объектов управления SQL Server для выполнения всего скрипта .

...