我正在使用 EF4.1、RIA 服务和 Silverlight。我在更新场景中遇到了一个有点奇怪的问题。
领域模型非常简单;它处理Requests和Persons。他们是一对一的关系。所以一个公民可以有多个请求,尽管实际上这永远不会发生,因为应用程序根本不提供这样做的功能。
Request有一个名为“Urgent”的属性,我将其更改为true,然后尝试保存。一切顺利,直到通过此方法开始实际持久化:
public void UpdateRequest(Request currentRequest)
{
Request original = ChangeSet.GetOriginal(currentRequest);
try
{
ObjectContext.Requests.AttachAsModified(currentRequest, original);
}
catch (Exception ex)
{
// weirdness here!
}
}
这几乎是 RIA 服务生成的标准方法(除了我为调试目的添加的 try/catch 处理程序。)然后我收到以下错误:
当我检查ChangeSet时,没有添加任何请求,所以我确定我没有偶然添加它。
An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.
我不明白... ObjectStateManager 中实际上没有添加对象,ChangeSet没有添加对象;这是从哪里来的?我跟踪了哪些属性正在被更改,所以我确定密钥没有被覆盖,也没有被添加或其他一些时髦的东西。
任何人都可以在这里阐明一下吗?到目前为止让我发疯了好几天......