C# Breeze SaveChanges在删除实体时始终引发DbUpdateConcurrencyException
我刚刚将“并发模式”属性启用为我的一个实体的固定属性 当我尝试更新时,一切都很好 但当我尝试删除实体时,总是会出现以下错误: DBUpdateConcurrencyException 受意外事件影响的存储更新、插入或删除语句 行数(0)。实体可能已被修改或删除,因为 实体已加载。刷新ObjectStateManager条目 是否有任何方法可以禁用删除操作的DBUpdateConcurrencyException?如果没有,我如何管理这种类型的异常C# Breeze SaveChanges在删除实体时始终引发DbUpdateConcurrencyException,c#,entity-framework,breeze,C#,Entity Framework,Breeze,我刚刚将“并发模式”属性启用为我的一个实体的固定属性 当我尝试更新时,一切都很好 但当我尝试删除实体时,总是会出现以下错误: DBUpdateConcurrencyException 受意外事件影响的存储更新、插入或删除语句 行数(0)。实体可能已被修改或删除,因为 实体已加载。刷新ObjectStateManager条目 是否有任何方法可以禁用删除操作的DBUpdateConcurrencyException?如果没有,我如何管理这种类型的异常 [HttpPost] public SaveRe
[HttpPost]
public SaveResult SaveChanges(JObject saveBundle)
{
try
{
return _breezeComponent.SaveChanges(saveBundle);
}
catch (DbUpdateConcurrencyException ex)
{
//Workaround needed
}
}
顺便说一句,我已经看过这类解决方案:。有什么方法可以将此代码与Breeze引擎集成
编辑:
我已经从1.4.5版升级到1.4.7版,但仍然存在相同的问题
如果我看一下JSON对象,将entityState从“已删除”更改为“已分离”会是一个解决方案吗?微风中有什么环境可以帮助我做到这一点吗
{
"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截取点,并从“保存映射”中删除任何已删除实体(属于级联删除关系的一部分)的所有子级。请参阅本页关于BeforeSaveEntities的Breeze文档:我们的应用程序框架中隐藏了一个机制,它在将更改保存到数据库之前确实更新了属性。所以这不是一个容易的问题
现在已将筛选器添加到解决方案中,以在删除时排除此模式 很好的猜测,但我的数据库中没有级联删除或级联更新。你正在运行哪个版本的Breeze?我目前的版本是1.4.5。也许升级到1.4.7会解决问题?可能,但不是很确定,因为我无法重新设置问题(在1.4.7上)。所以也许。。。