21
|
Alan Mendelevich · 技术社区 · 16 年前 |
![]() |
1
19
是的,出于某种原因,Linq到SQL将所有删除作为最后一件事来执行。这是无法改变的。 或者可能有。我还没有研究codegen DataContext,看看我们是否可以覆盖其中的某些内容。 您可以根据需要多次调用SubmitChanges()。当我需要首先删除时,我的解决方法是标记我的删除,调用SubmitChanges(),然后执行插入和更新,并再次调用SubmitChanges。 您可以将所有内容包装在TransactionScope中:
|
![]() |
2
4
一个不需要提前知道哪些实体发生了变化的更好的解决方案是使用DataContext的分部方法来拦截插入并首先推送删除。
|
![]() |
3
3
我也遇到了同样的问题。我想出了一个破解方法来解决这个问题,这似乎对我有效:在调用SubmitChanges()之前,我为更改集中的每个可能有问题的删除手动执行一些SQL:
|
![]() |
4
1
另一种解决方案是以正确的顺序将更改附加到另一个数据上下文。然而,这种解决方案的缺点是,仍然从应用程序的其他部分引用的、来自原始数据上下文的任何实体现在都将无效:( 我尝试了一个稍微的变化,为提交创建了第二个临时数据上下文。但我无法弄清楚如何将原始数据上下文恢复到干净的状态。 这非常令人沮丧:(
|
![]() |
5
0
与其只是扔掉所有的孩子并重新创建它们,不如考虑付出更多的努力,分两步完成:添加尚未添加的项目,删除之前添加但不再需要的项目。例如,在ThinqLinq.com网站上,我有可以分配到类别的帖子。在编辑屏幕中,我提供了一个可以选择和取消选择的类别列表。当我收到包含所选类别列表的帖子时,我会使用以下方法删除和更新相应的记录:
|