Asp.net web api EF 6回滚和更新最佳方法

Asp.net web api EF 6回滚和更新最佳方法,asp.net-web-api,entity-framework-6,Asp.net Web Api,Entity Framework 6,我有一个可行的解决方案,我正在发起这个主题,讨论最佳方法 环境:EF6,SQL 2012 情景: 我有Task和TaskDetail表,它们通过TaskID具有父子关系 创建方法: 创建任务时,我需要确保在TaskDetail表中也创建了一个条目。 第一种方法: 在任务表中创建一个条目。保存更改。获取TaskID并分配到DTO中,DTO包含详细信息表的信息。将DTO传递给TaskDetail创建方法。保存更改。犯罪如果发生任何错误,请回滚整个事务 第二种方法: 添加任务表的相关字段。同时添加任务

我有一个可行的解决方案,我正在发起这个主题,讨论最佳方法

环境:EF6,SQL 2012 情景:

我有Task和TaskDetail表,它们通过TaskID具有父子关系

创建方法: 创建任务时,我需要确保在TaskDetail表中也创建了一个条目。 第一种方法: 在任务表中创建一个条目。保存更改。获取TaskID并分配到DTO中,DTO包含详细信息表的信息。将DTO传递给TaskDetail创建方法。保存更改。犯罪如果发生任何错误,请回滚整个事务

第二种方法: 添加任务表的相关字段。同时添加任务明细表的相关字段。通过导航属性将新的详细信息表对象添加到任务表中。Task.taskdail.Add(newObj)。最后保存更改

问题1: 这两种方法都产生相同的SQL。但是我没注意到有多大的不同。。但是做这件事的最佳方法是什么

问题2: 另外,如果您看看我的场景,您会注意到它的SaveAll或SaveNone方法。最初,我尝试循环遍历DbEntityEntries,然后回滚更改。但这听起来适用于上面描述的第二种方法,而不是第一种方法,因为我在插入后进行了一次保存以获取TaskID。最后,我使用了EF6中引入的“DbConextTransaction”。但是什么是最好的方法

问题3:

更新方法:

在执行更新时,根据我的要求,我不会触摸任务表。它单独处理TaskDetail表,但需要从UI传递任务ID

  • •使用任务ID和活动标志获取现有任务详细信息 (存在一对多关系)
  • 将活动标志更新为false
  • 在任务详细信息表中创建新条目

我刚刚将上述语句也翻译成代码实现,但处理它的最佳方法是什么???

Entity Framework将自动处理很多这样的问题:给孩子一个父id(第二种方法),将其包装到事务(工作单元)中。只需确保只有一个SaveChanges(),并且它是开箱即用的。除非我不理解您的问题,否则Entity Framework将自动处理很多问题:给孩子一个父id(您的第二种方法),将其包装到事务中(工作单元)。只需确保只有一个SaveChanges(),并且它是开箱即用的。除非我不理解你的问题。