C#WPF使用数据网格从数据库中删除带有主键的项目

标签 c# wpf entity-framework linq

使用 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/

相关文章:

c# - Go 中的 C# DateTimeOffset 等价物是什么

c# - 在 C# 中以编程方式将 .crt + .key 文件转换为 X509Certificate2

c# - Microsoft Azure Functions Nuget 包阻止 NET 库打包到 Nuget 中

c# - WPF:如何更改 TransitioningContentControl 背景颜色?

c# - 通过 P/Invoke 从 C# 将可写字符串数组传递给 C++

c# - WPF DataGrid DataContext 极慢

entity-framework - EF Code First 现有数据库

c# - IIS 8 上的内部服务器错误 500

asp.net-mvc-3 - 无法加载文件或程序集 'EntityFramework'错误

c# - WPF 应用程序中的 TextBox.Text 内存泄漏