2

子エンティティを別のエンティティに追加してから、子エンティティを削除済みとしてマークすると(以前に変更を保存せずに)、バグが見つかったと思います。

テストは次のとおりです。

test("delete unsaved entity", 1, function () {
    var realEm = newEm();
    //ok(realEm.hasChanges() === false, "The entity manager must not have changes");
    var query = EntityQuery.from("Customers")
        .where("CustomerID", "==", "729de505-ea6d-4cdf-89f6-0360ad37bde7")
        .expand("Orders");
    stop();
    realEm.executeQuery(query)
        .then(function (data) {
            var cust = ko.observable(data.results[0]);
            var newOrder = realEm.createEntity("Order", {}, breeze.EntityState.Detached);
            cust().Orders.push(newOrder);
            //ok(newOrder.entityAspect.entityState.isAdded() === true, "The entity is Added");
            newOrder.entityAspect.setDeleted();
            //ok(realEm.hasChanges() === true, "The entity manager must have changes? Not clear to me but it's true");
            realEm.saveChanges();
            ok(realEm.hasChanges() === false, "The entity manager must not have changes");
        })
    .fin(start);
});
4

1 に答える 1

1

breeze v1.0.0以降、このバグは修正されました。遅れて申し訳ありません

以下の古い投稿

再現してくれてありがとう、それは本当に役に立ちます。ここにバグがあり、おそらく今日の後半または明日の初めに次のリリースで修正される予定です。

バグを明確にするために、「setDeleted」呼び出しの後の「hasChanges」呼び出しはfalseを返す必要がありますが、現在はtrueを返します。その理由は、「追加された」レコードを削除すると、エンティティがentityManagerから切り離されるだけだからです。したがって、entityManagerを「追加」前の状態に戻します。デタッチは発生しますが、この場合、hasChanges関数は壊れています。

しかし、他の2つの問題。

まず、この行を置き換えることができます

 var cust = ko.observable(data.results[0]);

これとともに

 var cust = data.results[0];

Breezeは、クエリから返されたエンティティからkoオブザーバブルを自動的に作成するためです。

次に、saveChangesへの呼び出し

  realEm.saveChanges();
  ok(realEm.hasChanges() === false);

saveChangesは非同期であるため、promiseに変換する必要があります。

  realEm.saveChanges().then(function(r) { 
      ok(realEm.hasChanges() === false);
  }
于 2013-01-25T18:16:40.743 に答える