我用 WCF 做了很多事情,我首先想到的是:“嗯,这个问题很奇怪”——但是在我弄清楚每一个之后,它总是在某种程度上是有意义的(有时更多,有时更少)。
但是现在我陷入了困境,并且凭借我所有的想象力,我想不出为什么会出现此错误的原因:
无法序列化 EntityReference 对象。当RelationshipManager 属于没有实现IEntityWithRelationships 的实体对象时,这种类型的对象不能被序列化。
把它放在一个上下文中,让我简单地告诉你我的程序:
我有一个客户端,它向我的 WCF 发送一个 ID。如果此 ID 正在使用中,我将从 EF 中获取它的相关对象(否则我将创建一个新对象)并将其发回。
这一切都是由 Selftracking Entities 完成的 - 并且让对象工作正常,以及第一次更新:
public static void UpdatePaperOnServer(ref PAPER p)
{
var newP = ServiceClient.UpdatePaper(p);
p = newP;
}
引用“p”是 <Program> 中的一个字段,任何更改都将发生在此变量上。
这是 UpdatePaper 的服务器端实现。
如您所见,这里也不会发生任何魔术:
public PAPER UpdatePaper(PAPER p)
{
p.ChangePaperOnDb(); //Simple static DAL-Accessor, works fine
return p; //The Client should get any changes made by other users so far, that's why I'll give the obj back... or if it's a new obj and it has an ID now
}
正如我所说,我的第一个更新工作正常,但是一旦我再次触发更新例程,我就会收到上面提到的这个错误。
在与我的好伙伴 google 相处了一段时间后,我发现只有一种方法可以将 .NET 版本从 4.0 更改为 3.5。但我不知道这是否适合我,因为我无法将运行时从 4.0 更改为 3.5。
如果有人知道发生了什么 - 请告诉我。非常感谢!