Не работает IDENTITY_INSERT в SQL Server Compact с Entity Framework 6.4 - PullRequest
1 голос
/ 10 апреля 2020

Я хочу добавить запись с указанием c ID в базу данных, но когда я пишу и запускаю этот код, созданная строка начинается с цифры один. Мой ID является идентификатором, и я отключаю вставку идентификатора с помощью следующего кода:

Db = new Entitites();

Db.Database.ExecuteSqlCommand(@"SET IDENTITY_INSERT CarName ON");

Db.CarName.Add(new MrSanadBaseDb.CarName()
   {
        PK_Car = 120,
        Name = "",
        IsDeleted = false
   });

Db.SaveChanges();
Db.Database.ExecuteSqlCommand(@"SET IDENTITY_INSERT CarName OFF;");
Db.Database.ExecuteSqlCommand(@"ALTER TABLE CarName ALTER COLUMN PK_Car IDENTITY (121,1);");

Но запись не сохраняется с ID = 120, запись сохраняется с ID = 1.

Я работаю с SQL Server Compact Edition (SQL Server CE).

enter image description here

1 Ответ

2 голосов
/ 10 апреля 2020

Идентификационная вставка находится в области сеанса (открытого соединения). Вы создали db-контекст с уже открытым соединением? Или вы дали ему строку подключения или закрытое соединение? Если он открывает соединение для каждой операции: непрерывность сеанса отсутствует, поэтому каждая из них, если три операции семантически не связаны, и не разделяют сеанс.

Основываясь на этом конструкторе по умолчанию, я думаю, что он использует Подход "поиск по умолчанию строки подключения, использовать отложенное подключение". Попробуйте вместо этого использовать конструктор, который принимает соединение, и убедитесь, что оно сначала открыто .

В частности:

using var conn = // ... create connection
conn.Open();
Db = new Entitites(conn);
// ... the rest of your code
...