我有一个有效的解决方案,我正在启动这个主题,讨论最佳方法。
环境:EF6,SQL 2012 情形:
我有Task和TaskDetail表,它通过TaskID具有父子/关系。
创建方法: 在创建任务时,我需要确保在TaskDetail表中进行输入。 第一种方法: 任务表中都有一个条目。保存更改。获取TaskID并将其分配到具有Detail表信息的DTO中。将DTO传递给TaskDetail创建方法。保存更改。提交..如果发生任何错误,请回滚整个事务
第二种方法: 添加Task表的relavent字段。同时添加“任务明细”表的相关字段。通过导航属性将新的详细信息表对象添加到Task表。 Task.Taskdetail.Add(newObj)。最后SaveChanges。
问题1: 这两种方法都产生相同的SQL。虽然不能注意到很多差异但是这样做的最佳方法是什么?
问题2: 另外,如果你看一下我的场景,你会注意到它的SaveAll或SaveNone方法。最初我尝试循环遍历DbEntityEntries,然后回滚更改。但这听起来适用于上面描述的第二种方法而不适用于第一种方法,因为我在插入后进行保存以获取TaskID。最后我最终使用了EF 6中引入的“DbConextTransaction”。但最好的方法是什么?
问题3:
更新方法:
根据我的要求进行更新时,我不会触及任务表。它仅处理TaskDetail表,但需要从UI传递的任务ID。
我刚刚将上述语句翻译成代码实现,但处理它的最佳方法是什么????