【发布时间】:2019-10-07 16:35:02
【问题描述】:
我有一个 mvvm WPF 应用程序。在我看来,我显示了基本上 3 个表的表示。表 A 是主要对象。表 B 和 A 具有 n-n 关系。我有一个连接表来连接两者
所以在实际的应用程序中,您可以选择/取消选择您的 B 对象,我设法正确表示模型中选择/选择的内容。
我的问题出现了,最初选择对象 B,然后取消选择,然后再次选择。我的模型 A 中有一个“新”B 对象,不再有“ID”来检查它是否是新创建的,或者数据库中的条目是否已经存在。
基本上,我必须在实现某种机制之间做出决定,该机制会跟踪所有可能的创建/更新/删除选择。或者只是删除所有记录->根据我的模型添加记录。
选项 #2 对我来说似乎更简单,但也不是超级干净。
我想知道它到底有多糟糕?这是少量数据,可能不会经常更新。
编辑说明:它不是代码,但它是我能想到的最好的解释方式。
所以我开始加载我的客户对象,它有一个客户组列表。在基础数据库中,我有一个表客户、一个表组和一个表 Customer_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)
刚写出来,我就想到了一个办法。我编写了一个更智能的查询来检查 group X Customer Y 的条目是否已经存在,如果存在则更新,否则创建它...我太专注于 ID。
【问题讨论】:
-
当您说“删除数据”时,您的意思是内存中的数据,对吗?还是您实际上是通过 SQL 删除/截断数据?当您可以处理内存中的所有内容时,我认为后者没有任何理由。您能否使用 ViewBag 保持“B”对象存在而不会丢失它,尤其是在您提到的数据不多的情况下。
-
你能输入一个代码示例吗?很难理解为什么任何一个对象在提交到数据库后都没有 ID。