我正在开发一个带有自我跟踪实体的WCF数据服务,我想阻止客户端插入重复的内容.每当他们POST数据而不提供数据键的值时,我必须执行一些逻辑来确定数据是否已存在于我的数据库中.我写了一个像这样的Change拦截器:
[ChangeInterceptor("MyEntity")]
public void OnChangeEntity(MyEntity item, UpdateOperations operations){
if (operations == UpdateOperations.Add)
{
// Here I search the database to see if a matching record exists.
// If a record is found, I'd like to use its ID and basically change an insertion
// into an update.
item.EntityID = existingEntityID;
item.MarkAsModified();
}
}
但是,这不起作用.忽略existingEntityID,因此始终插入记录,从不更新记录.它甚至可以吗?提前致谢.
最佳答案 万岁!我设法做到了.
item.EntityID = existingEntityID;
this.CurrentDataSource.ObjectStateManager.ChangeObjectState(item, EntityState.Modified);
我不得不在其他地方改变对象状态,即.通过调用ObjectStateManager的.ChangeObjectState,它是底层EntityContext的一个属性.我被.MarkAsModified()方法误导了,在这一点上,我不确定它是做什么的.