C# SQL是“删除所有记录,然后再添加它们”的即时错误做法吗?

C# SQL是“删除所有记录,然后再添加它们”的即时错误做法吗?,c#,sql,wpf,C#,Sql,Wpf,我有一个mvvm WPF应用程序。在我看来,我展示了三张表的代表性。表A是主要对象。表B和A具有n-n关系。我有一个连接表来连接这两者 因此,在实际的应用程序中,你可以选择/取消选择你的B对象,我成功地对模型中选择/拾取的对象进行了正确的表示 我的问题来了,当对象B最初被选中,然后被取消选中,然后再次被选中。我的模型a中有一个新的B对象,不再有ID来检查它是否是新创建的,或者DB中是否已经存在条目 基本上,我必须在实现某种机制之间做出决定,这种机制可以跟踪要创建/更新/删除的选项。或者只是删除所

我有一个mvvm WPF应用程序。在我看来,我展示了三张表的代表性。表A是主要对象。表B和A具有n-n关系。我有一个连接表来连接这两者

因此,在实际的应用程序中,你可以选择/取消选择你的B对象,我成功地对模型中选择/拾取的对象进行了正确的表示

我的问题来了,当对象B最初被选中,然后被取消选中,然后再次被选中。我的模型a中有一个新的B对象,不再有ID来检查它是否是新创建的,或者DB中是否已经存在条目

基本上,我必须在实现某种机制之间做出决定,这种机制可以跟踪要创建/更新/删除的选项。或者只是删除所有记录->根据我的模型添加记录

选项2对我来说似乎简单得多,但也不是超级干净

我想知道它到底有多糟?这是一小部分数据,可能不会经常更新

编辑澄清:这不是代码,但这是我能想到的最好的解释方式

所以我开始加载我的Customer对象,它有一个CustomerGroup列表。在底层数据库中,我有一个表Customers、一个表Groups和一个表Customer\u Groups来加入它们

最初,我的客户/屏幕如下所示

[ ] 1
[x] 2   (ID: 67, Group: 2, Customer: 5)
[ ] 3
[ ] 4
[x] 5   (ID: 30, Group: 5, Customer: 5)
然后用户取消选择组2

[ ] 1
[ ] 2   
[ ] 3
[ ] 4
[x] 5   (ID: 30, Group: 5, Customer: 5)
然后他再次添加组2,但由于上次未选中它,我的内存中对象将获得一个新生成的关联组对象

[ ] 1
[x] 2   (ID: NULL, Group: 2, Customer: 5)
[ ] 3
[ ] 4
[x] 5   (ID: 30, Group: 5, Customer: 5)

写下这些,我想到了一个方法。我编写了一个更智能的查询,检查X组客户Y的条目是否已经存在,如果存在则更新,否则创建它。。。我太关注ID了。

如果不经常更新,重新创建这些关联应该不会有问题。 现在,如果是一个不断删除/重新关联记录的查询/过程,那么是的,您可能希望避免这种情况。 避免意外删除/重新添加关联的最佳方法是使用保存按钮更新视图/视图模型代码,该按钮将在用户完成后提交更改,而不是在每次用户交互后直接执行SQL更新。
我不会尝试恢复已删除的关联记录。不过,如果您愿意,也可以使用删除的标志列。但是,如果您想通过清除标志来重新添加链接,那么将导致出现一堆不必要的行。

由于您已经在数据库中为链接创建了项,我将创建一个新对象,该对象继承该DBO,并在其上有一个IsSelected属性,我们可以绑定到复选框。当用户保存时,您可以循环浏览对象列表,查看是否选中了某个项目但没有ID,然后将其添加到数据库中。如果未选择某个项目,但该项目具有ID,则可以将其从数据库中删除。
您还可以查看check_changed事件,如果用户没有单击保存按钮,只需更新该特定项。

当您说删除数据时,您是指内存数据,对吗?或者您实际上是在通过SQL删除/截断数据吗?我看不出有任何理由支持后者,因为你可以在记忆中处理一切。你能用ViewBag保持B对象的存在而不丢失它吗,特别是当它不是你提到的那么多数据时。你能用一个代码示例吗?很难理解为什么两个对象在提交到数据库后都没有ID。