gpt4 book ai didi

c# - 删除实体时,Breeze SaveChanges 总是抛出 DbUpdateConcurrencyException

转载 作者:太空狗 更新时间:2023-10-29 23:31:30 25 4
gpt4 key购买 nike

我刚刚启用了我的一个实体的“并发模式”属性。

当我尝试更新时一切正常。

但是当我尝试删除实体时,我总是得到这个错误:

DBUpdateConcurrencyException

Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. Refresh ObjectStateManager entries.

有什么方法可以禁用 DBUpdateConcurrencyException 进行删除操作吗?如果没有,我该如何处理此类异常?

[HttpPost]
public SaveResult SaveChanges(JObject saveBundle)
{

try
{
return _breezeComponent.SaveChanges(saveBundle);
}
catch (DbUpdateConcurrencyException ex)
{
//Workaround needed
}

}

顺便说一句,我已经看过这些解决方案:How to ignore a DbUpdateConcurrencyException when deleting an entity .有什么方法可以将此代码与 Breeze 引擎集成?

编辑:我已经从 1.4.5 升级到 1.4.7,我仍然有同样的问题。

如果我查看 JSON 对象,将 entityState 从“Deleted”更改为“Detached”是否是一种解决方案? Breeze 中是否有任何设置可以帮助我做到这一点?

{
"entities": [
{
"EventId": 11111,
"EventName": "Jon Doe",
"EventCity": "Montreal",
"EventDate": "2014-01-24T00:00:00Z",
"TermDate": "2014-01-08T00:00:00Z",
"Insertedby": "Terry",
"InsertDate": "2014-01-06T14:31:14.197Z",
"Updatedby": "Terry",
"UpdateDate": "2014-01-07T15:50:53.037Z",
"entityAspect": {
"entityTypeName": "Event:#Cds.Corpo.GuestList.Models",
"defaultResourceName": "Events",
"entityState": "Deleted",
"originalValuesMap": {},
"autoGeneratedKey": {
"propertyName": "EventId",
"autoGeneratedKeyType": "Identity"
}
}
}
],
"saveOptions": {}
}

最佳答案

只是猜测,但是您的数据库中是否启用了某种形式的级联删除。如果是这样,那么问题可能是父项的删除导致子项也被删除,并且当 Breeze 服务器代码启动时,它会尝试再次删除“已经”删除的子项。当此删除找不到子项时,它会抛出并发异常。

避免这种情况的方法是使用 BeforeSaveEntities 拦截点并从“saveMap”中删除任何已删除实体(属于级联删除关系的一部分)的所有子代。请参阅此页面上关于 BeforeSaveEntities 的 Breeze 文档:http://www.breezejs.com/documentation/contextprovider

关于c# - 删除实体时,Breeze SaveChanges 总是抛出 DbUpdateConcurrencyException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20958374/

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