0

我正在使用 PHP OData sdk (odata.org) 并尝试在新对象和两个现有对象之间添加链接:

//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 网站上的生成说明生成代理类等。

我收到以下异常消息:

The context is not currently tracking the entity.

翻译为代理类没有对对象的引用$v$o存储在任何地方。将对象添加到代理类的引用的一种方法是:

$proxy->AddToVCollection($v);

除非我这样做并尝试保存,否则我会遇到主键冲突,因为它会尝试将$v对象保存为新条目。

那么,如何让我的代理类跟踪我的对象$v$o所以当我这样做时,$proxy->AddLink($b, 'V', $v);我没有得到上述异常?

4

1 回答 1

0

我不知道为什么没有跟踪对象$v$o参数,但我必须从代​​理重新调用它们,然后才能将它们添加到对象$b

//Add a new object to the database. Pass in objects $v and $o.
public function addB($v,$o) {

    //Recreate my existing objects from Service
    $o = $proxy->OCollection()->Filter("id eq '".$o->getId()."'")->Execute()->Result[0];
    $v = $proxy->VCollection()->Filter("id eq '".$v->getId()."'")->Execute()->Result[0];

    //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();
}

当您调用 Execute 时,代理将开始跟踪对象。在这种情况下,我只需要链接对象$v$o,但它们本身具有链接,我Expand()在原始请求中将这些链接作为参数发送给addB()函数。会不会Expand()是以某种方式阻止代理跟踪对象?

于 2013-10-23T09:03:19.160 回答