LINQ to SQL处理自动增量主键

时间:2012-12-22 15:20:03

标签: c# wpf windows-phone-7 linq-to-sql

我正在尝试在本地数据库(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达到最大值。也许这对我的项目来说不是一个真正的问题,但我想知道如何处理它,以防它发生。如果可能,如果数据库完全填满,我该如何理解和处理。

1 个答案:

答案 0 :(得分:3)

违反了自动增量。

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

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

例如:

-------------人员表--------------

ID [自动递增] ---- ----名称年龄
10000 ------------------- -------杰克21
10001 -------------------肖恩---- 19个
10002 ------------------- Albert ----- 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的记录,我把这个负担放在你的肩膀上。

好运。