Почему SET IDENTITY_INSERT OFF не работает для меня в EF 4.1?

Я использую Entity Framework 4.1 Code First, и у меня есть таблица с ключом IDENTITY, потому что все новые записи в этой таблице должны иметь автоматически генерируемый ID (столбец ID называется AccountNumber). Мне нужно импортировать некоторые данные из предыдущей инкарнации этой системы - эти номера счетов должны быть сохранены.

В предыдущем вопросе я узнал, что мне нужно SET IDENTITY_INSERT ON, чтобы сохранить старые номера счетов. Идея заключается в том, что при импорте старых клиентов я собираюсь включить IDENTITY_INSERT ON, запустить необработанный SQL-оператор вставки, затем выключить его и продолжить работу в обычном режиме, используя сущности EF.

Итак, у меня есть следующий код:

    public const string InsertQuery = "INSERT INTO dbo.Businesses (AccountNumber, Name, Active, CreatedBy, CreatedOn, ModifiedBy, ModifiedOn) VALUES({0}, {1}, {2}, {3}, {4}, {5}, {6})";

...

            dbContext.Database.ExecuteSqlCommand("SET IDENTITY_INSERT dbo.Businesses ON");
            dbContext.Database.ExecuteSqlCommand(InsertQuery, customerData.AccountNumber, customerData.Name, customerData.Active,
                                                 m_userContextManager.GetCurrentUserName(), Now,
                                                 m_userContextManager.GetCurrentUserName(), Now);
            dbContext.Database.ExecuteSqlCommand("SET IDENTITY_INSERT dbo.Businesses OFF");

            // load the entity and map the rest of the attributes
            dbContext.SaveChanges();

Когда я перехожу к выполнению второго оператора, я получаю следующую ужасающую ошибку (потому что я только что установил значение OFF или так я думаю):

Cannot insert explicit value for identity column in table 'Businesses' when IDENTITY_INSERT is set to OFF.

Возвращаемое значение оператора -1, но поскольку документация на MSDN по ExecuteSqlCommand очень неадекватна, я понятия не имею, что это значит. Я бы ожидал, что будет выбрасываться исключение, если оператор по какой-то причине не выполнился. Кто-нибудь знает, что здесь происходит?

7
задан Community 23 May 2017 в 12:02
поделиться