Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用工作复制方法正确保存新数据_C#_Mysql_Entity Framework Core_Asp.net Core Webapi - Fatal编程技术网

C# 如何使用工作复制方法正确保存新数据

C# 如何使用工作复制方法正确保存新数据,c#,mysql,entity-framework-core,asp.net-core-webapi,C#,Mysql,Entity Framework Core,Asp.net Core Webapi,在我的应用程序中,每个用户都可以添加一本新书。可以添加该书的照片。表单中的所有字段都是必填字段,但如果用户希望稍后完成此表单,他可以将表单的一半保存为工作副本。我想知道我需要如何构建工作副本功能,只保存书籍的新照片并删除旧照片 Entities: -Book *Id [PK] *Title *Author *Description *PagesCount -BookPhotos *Id [PK] *BookId [FK] *BookPhoto [string base64] 我有几个想法,但

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

Entities:
-Book
*Id [PK]
*Title
*Author
*Description
*PagesCount

-BookPhotos
*Id [PK]
*BookId [FK]
*BookPhoto [string base64]
我有几个想法,但我需要选择一个(或可能发现不同的)具有最佳优化的:

  • 每次删除连接到已编辑书本实体的所有照片
  • 尝试在BookPhoto[base64]字段中找到相同的值,并在数据库中仅编辑此字段
  • 编辑表中BookPhoto[base64]在编辑请求数据中不存在的每条记录(到新的BookPhoto数据)
  • 我认为:

  • 我想知道如果我每次请求都删除一个新数据并将其插入表中,数据库是否会对我生气。这种方法会有什么问题吗?如果这会影响到100或数千人呢
  • 这听起来不错,但如果编辑数据不包含旧的BookPhoto值呢?然后,我需要从表中删除请求编辑(工作副本)数据中不存在的所有记录
  • 我认为编辑和比较会有很多问题。例如,如果请求数据中的照片少于表中的照片,该怎么办。哪一个将使用哪一个进行编辑
  • 如果有人有一些想法如何以正确的方式做到这一点,我将不胜感激


    致以最诚挚的问候:)

    比较
    BookPhotos.Id

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

  • 如果ID在工作集中,则更新字节(本例中为base64字符串)
  • 如果ID不在工作集中,则删除照片
  • 对于每个工作组照片:

  • 如果ID不在DB中,则将该照片作为新照片插入
  • 或者,web请求可以指定哪些记录是新的、修改的和删除的,而不仅仅是提供模型的新状态。然后,您只需对DB执行这些操作


    一个骗局是你信任客户。如果它说添加一个已经存在的项(主键)或修改/删除一个不存在的项,那么DB操作当然会失败。您可以决定在这种情况下如何响应客户端,以及是否将所有操作作为单个事务回滚,或者是否允许提交有效的操作。

    比较
    BookPhotos.Id

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

  • 如果ID在工作集中,则更新字节(本例中为base64字符串)
  • 如果ID不在工作集中,则删除照片
  • 对于每个工作组照片:

  • 如果ID不在DB中,则将该照片作为新照片插入
  • 或者,web请求可以指定哪些记录是新的、修改的和删除的,而不仅仅是提供模型的新状态。然后,您只需对DB执行这些操作

    一个骗局是你信任客户。如果它说添加一个已经存在的项(主键)或修改/删除一个不存在的项,那么DB操作当然会失败。您决定在这种情况下如何响应客户机,以及是否将所有操作作为单个事务回滚,或者是否允许提交有效的操作