如何使用工作副本方法正确保存新数据

时间:2020-04-17 21:08:38

标签: c# mysql entity-framework-core asp.net-core-webapi

在我的应用程序中,每个用户都可以添加新书可以添加本书的照片。表单中的所有字段均为必填字段,但是如果用户要稍后填写此表单,他可以将表单的一半保存为工作副本。我不知道我该如何构建工作副本功能,该功能将仅保存书籍的新照片并删除旧照片。

height: 100%

我有两个主意,但是我需要选择一个(或者可能会发现不同)最佳优化:

  1. 每次删除与已编辑的Book实体相关的所有照片。
  2. 尝试在BookPhoto [base64]字段中找到相同的值,并仅在数据库中编辑此字段。
  3. 编辑表中的每条记录(至新的BookPhoto数据),其中BookPhoto [base64]在编辑请求数据中不存在。

我认为:

  1. 我想知道是否我会在每次请求时都将表中的新数据删除并将新数据插入表中,数据库是否会对我生气?这种方法会有任何问题吗?如果这样做可以成百上千的人怎么办?
  2. 这听起来不错,但是如果编辑数据不包含旧的BookPhoto值怎么办?然后,我需要从表中删除请求编辑(工作副本)数据中不存在的每条记录。
  3. 我认为编辑和比较会存在很多问题。例如,如果请求数据中的照片少于表中的照片,该怎么办。哪个将用哪个进行编辑。

如果有人对如何正确使用此方法有一些想法,我将很感激。

最好的问候:)

1 个答案:

答案 0 :(得分:0)

比较BookPhotos.Id

从数据库中选择工作集的Book的BookPhotos。对于每张DB照片:

  1. 如果ID在工作集中,则更新字节(在您的情况下为base64字符串)
  2. 如果ID不在工作集中,则删除照片

对于每张工作现场照片:

  1. 如果身份证不在数据库中,请将该照片作为新照片插入

或者,Web请求可以指定哪些记录是新的,修改的和删除的,而不仅仅是提供模型的新状态。然后,您只需对数据库执行这些操作即可。

与此相关的一个缺点是您信任客户端。如果说添加一个已经存在的项目(主键)或修改/删除一个不存在的项目,则数据库操作当然会失败。您可以决定在这种情况下如何响应客户端,以及是否将所有操作作为单个事务回滚或允许有效的工作进行落实。

相关问题