我的SQL序列有问题,这是我第一次使用它。有一些关于 sql 序列和关于NOCACHE 参数的内容。
我在没有缓存的 SQL 中创建了一个序列,因为我总是需要我的索引是连续的(最大的问题是我在插入之后需要他的主键值,所以我可以创建一个新对象并将其插入另一个表)。
这是我的序列,它也应该自动递增:
CREATE SEQUENCE TestSequence
AS INT
START WITH 1
INCREMENT BY 1
NO CACHE
这是我的表,带有 myTableId - 主键
CREATE TABLE database.dbo.myTable
(myTableId INT NOT NULL,
name VARCHAR(10))
GO
ALTER TABLE dbo.myTable
ADD DEFAULT NEXT VALUE FOR dbo.TestSequence FOR myTableId
GO
当我在 sql 中创建插入语句时效果很好(我也重新启动了我的 sql 连接,之后 myTableId 没有跳到数字上),但是当我从.net 插入时,它似乎无法识别自动增量:
在第一次插入时,索引的值是 0(??? 它应该是 1),然后我得到这个错误:“违反主键约束 'PK_myTable'。不能在对象'dbo.myTable'中插入重复键' . 重复键值为 (0)。\r\n 语句已终止。"
因为第二个对象的 myTableId 与第一个对象相同。这是我的代码:
myTable myNewObject = new myTable{name = "dada"}; _db.myTable.Add(myNewObject); _db.SaveChanges(); int id = myNewObject.myTableId; //here i'm getting the foreign-key value that i need
我不知道它是否相关,但我使用的是 SQL 2012 和 MVS 2012(实体框架)
你知道我的错误在哪里或我错过了什么吗?谢谢