私は最初に「うーん、この問題は奇妙だ」と思ったWCFで多くのことをしましたが、それぞれを理解した後、それは常にどういうわけか意味がありました(時にはもっと、時にはもっと少なく)。
しかし、今、私は立ち往生していて、想像力を駆使しても、このエラーが発生する理由が思い浮かびません:
EntityReference オブジェクトをシリアル化できませんでした。RelationshipManager が IEntityWithRelationships を実装しないエンティティ オブジェクトに属している場合、このタイプのオブジェクトはシリアル化できません。
コンテキストに入れるために、私のプログラムについて簡単に説明しましょう。WCF
に ID を送信するクライアントがあります。この ID が使用されている場合は、その関連オブジェクトを EF から取得し (そうでない場合は新しい ID を作成します)、それを送り返します。
これはすべて Selftracking Entities によって行われます。オブジェクトの取得は正常に機能し、最初の更新も同様です。
public static void UpdatePaperOnServer(ref PAPER p)
{
var newP = ServiceClient.UpdatePaper(p);
p = newP;
}
参照 "p" は < プログラム > のフィールドであり、変更はこの変数で行われます。
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
}
私が言ったように、私の最初の更新は正常に動作しますが、更新ルーチンを再度トリガーするとすぐに、上記のエラーが発生します。
仲良しのグーグルとしばらく過ごした後、.NETバージョンを4.0から3.5に変更するアプローチしか見つかりませんでした。しかし、ランタイムを 4.0 から 3.5 に変更できないため、それが私にとって適切かどうかはわかりません。
何が起こっているのか手がかりがあれば、教えてください。どうもありがとうございました!