PHP OData sdk (odata.org) を使用しており、新しいオブジェクトと 2 つの既存のオブジェクトの間にリンクを追加しようとしています。
//Add a new object to the database. Pass in objects $v and $o.
public function addB($v,$o) {
//Create a new object
$b = new B();
$b->V = $v;
$b->O = $o;
//Add a link between my objects
$proxy->AddLink($b, 'V', $v);
$proxy->AddLink($b, 'O', $o);
$proxy->SaveChanges();
}
odata.org Web サイトの生成手順を使用して、プロキシ クラスなどを生成します。
次の例外メッセージが表示されます。
The context is not currently tracking the entity.
これは、プロキシ クラスがオブジェクトへの参照を取得していない$v
か、$o
どこにも格納されていないためです。プロキシ クラスの参照にオブジェクトを追加する 1 つの方法は次のとおりです。
$proxy->AddToVCollection($v);
それを行って保存しようとすると、$v
オブジェクトを新しいエントリとして保存しようとするため、主キーの競合が発生します。
では、プロキシ クラスにオブジェクトを追跡させるにはどうすればよいでしょ$v
うか。$o
そうすれ$proxy->AddLink($b, 'V', $v);
ば、上記の例外は発生しません。