gpt4 book ai didi

c# - 在 SubmitOperation 失败时保持 DomainContext 最新

转载 作者:太空宇宙 更新时间:2023-11-03 11:31:21 27 4
gpt4 key购买 nike

背景:Silverlight 4 - RIA - Entity Framework 4

描述:我有一些删除代码:

db.Items.Remove(selectedItem);
db.SubmitChanges(deleteItemOperationCompleted, null);

这里,项目从域上下文中删除,然后服务尝试在 EF 上执行操作(EF 又在 DB 上执行操作)。

回调方法:

private void deleteOperationCompletedM(SubmitOperation op)
{
if (op.Error == null)
{
MessageBox.Show("Delete operation was successfull.");
// Some other code here (removed for brevity)
}
else
{
op.MarkErrorAsHandled();
MessageBox.Show("An error has occured." + op.Error.Message);
}
}

复制:我尝试删除该项目(由于数据库中的参照完整性约束而无法删除)。我收到错误发生的消息。没关系。当我随后尝试删除其他一些项目(与任何其他实体没有外键关联)时,我收到相同的消息,即使可以从数据库中删除该项目。

问题是我已经从域上下文中删除了第一项(即使它没有从数据库中删除)。因此,当我尝试删除第二项时,它也会从上下文中删除。提交更改时,最后一项可以从数据库中删除,但问题是更改是针对整个上下文提交的,因为在第一步中我已经删除了一个无法从数据库中删除的项目,提交操作失败。

问题在提交失败的情况下“回滚”操作的正确方法(最佳实践)是什么?我唯一能想到的就是创建另一个域上下文并再次加载数据,但由于加载的数据量,我想避免这种情况。上下文是否可以返回到某个先前的状态或取消未决的更改?如何解决这个问题?

最佳答案

在您的情况下,您应该调用 RejectChanges在您的 DomainContext 上取消项目的删除并更改其 EntityState回到未修改状态。

private void deleteOperationCompletedM(SubmitOperation op) {
if (op.Error == null) {
MessageBox.Show("Delete operation was successfull.");
// Some other code here (removed for brevity)
}
else{
op.MarkErrorAsHandled();
MessageBox.Show("An error has occured." + op.Error.Message);

db.RejectChanges(); // call reject changes on the DomainContext
}
}

关于c# - 在 SubmitOperation 失败时保持 DomainContext 最新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7671083/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com