IDENTITY_INSERT 在 SQL Server Compact 与 Entity Framework 6.4 中不工作
Not working IDENTITY_INSERT in SQL Server Compact with Entity Framework 6.4
我想将具有特定 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)。
身份插入是会话(连接打开)范围的。您是否使用 已经打开的 连接创建了 db-context?或者你给它一个连接字符串,或者一个关闭的连接?如果是每次操作都打开连接:没有session的连续性,所以每一个if三个操作在语义上是不相关的,不共享一个session。
根据默认构造函数,我认为它使用的是 "lookup default connection string, use deferred connection" 方法。尝试使用接受连接的构造函数,确保它首先打开。
具体来说:
using var conn = // ... create connection
conn.Open();
Db = new Entitites(conn);
// ... the rest of your code
我想将具有特定 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)。
身份插入是会话(连接打开)范围的。您是否使用 已经打开的 连接创建了 db-context?或者你给它一个连接字符串,或者一个关闭的连接?如果是每次操作都打开连接:没有session的连续性,所以每一个if三个操作在语义上是不相关的,不共享一个session。
根据默认构造函数,我认为它使用的是 "lookup default connection string, use deferred connection" 方法。尝试使用接受连接的构造函数,确保它首先打开。
具体来说:
using var conn = // ... create connection
conn.Open();
Db = new Entitites(conn);
// ... the rest of your code