LINQ到SQL句柄自动增加主键

本文关键字:增加 SQL 句柄 LINQ | 更新日期: 2023-09-27 17:49:21

我正在尝试在本地数据库(SQL CE)中存储数据。我已经设置了RowObject的属性如下:

    [Column(IsPrimaryKey=true,CanBeNull=false,IsDbGenerated=true,AutoSync=AutoSync.OnInsert,DbType="int NOT NULL IDENTITY")]
    public int key
    { get; set; }

和主键在插入新记录时自动增加。但如果我删除一条或多条记录,然后插入一条新记录,它的主键值对应于最后插入记录的主键值加1,尽管该记录已被删除。我知道更新所有主键是不可能的。但是,有可能控制主键的增量吗?避免主键的连续递增?

好的,谢谢你的回答。我问是因为我担心PK达到最大值。也许这对我的项目来说不是一个真正的问题,但我想知道如何处理它,以防它发生。如果可能的话,如果数据库完全满了,我该如何理解和处理呢?

LINQ到SQL句柄自动增加主键

这违反了自动递增规则。

我有时由于需要禁用列的自动增量来添加在旧位置删除的行,然后再次启用它。

如果你坚持这样做,你可以添加两个触发器,在删除触发器禁用列的自动递增行为,然后在插入触发器之后的另一个触发器上再次启用它。
因此,在删除时禁用它,在下一次插入时添加max(ID)+1,并在插入后再次启用它。

例如:

-------------人物表--------------

ID(自动递增),姓名,年龄
10000年 ------------------- 杰克- 21
10001年 ------------------- 肖恩- 19
10002年 ------------------- 阿尔伯特- 33

Delete from Person where ID = 10002;  
set identity_insert AAA ON  

现在下一个ID是10003但是你想要10002

DECLARE @ID int;  
select @ID = max(ID)+1 from Person  
Insert into Person(ID,Name,Age) values(@ID,'Mahdi',23)  
set identity_insert AAA OFF  --Auto Increments from now on

你应该检查一下你是否应该插入有/没有ID的记录,我把这个负担放在你的肩膀上。

好运。