使用 LINQ,我尝试使用 db.Dishes.Remove(Dish);
但是当我删除项目并插入新项目时,新项目的主键 (id) “跳转”了一个值。
例如
1 Shoes
2 Jeans //I delete this item
添加新项目时
1 Shoes
3 T-Shirt //jumps a value for Id
我也在我的 DBContext.cs
中尝试过这个
modelBuilder.Entity<Cart>()
.HasOptional(i => i.Item)
.WithMany()
.WillCascadeOnDelete(true);
但是没有效果
有没有更好的方法从数据库中删除项目?
最佳答案
问题是,当我们使用 DELETE 时,它会从表中删除行,但计数器不会更改(如果删除的行具有自动递增 PK),请参阅 DELETE vs TRUNCATE . 所以,如果你想重用键值,那么你可以做一些事情:
1) 在你的代码中处理Key的自增部分
2) 如果你有 访问数据库或想查询它的内容 可能有帮助(SQL Server):
DBCC CHECKIDENT ('tablename', RESEED, newseed)
要从代码中执行此操作,您可以在删除后执行以下操作:
db.ExecuteCommand("DBCC CHECKIDENT('tablename', RESEED, newseed);")
其中 'newseed
' 是已删除行的 ID。例如,如果 newseed 为 0,则下一个插入将为 1,如果为 10,则插入将为 11。获取新种子value 您还可以获得驻留在数据库中的最大 id 值,然后从那里开始工作。如果您决定走这条路,最好检查一下您可以采取哪些方法。
来自 Reset autoicrement in SQL Server以及如何在 code 中使用它.
关于C#WPF使用数据网格从数据库中删除带有主键的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34106735/