0

ウィジェットのマスター ファイルがあり、同じウィジェット マスターを共有するウィジェットの多くのバージョンが存在する可能性があります。したがって、データベースには widgetMasters および widgetVersions テーブルがあります。

widgetMaster ID は ID 整数フィールドであり、widgetversions の icollection が設定されています。

Widgetversion には、それが属する widgetMaster ID を指す外部キーがあります。

サイトに「新しいウィジェットの作成」フォームがあります。これはボタンが押された後にロードされ、「createEntity」を使用して widgetMaster と widgetVersion の空のエンティティを作成します。バージョン「001」が作成されると同時に、親「widgetMaster」が作成されるという考え方です。マスターには、説明といくつかのカテゴリ フィールドのみが含まれます。バージョンには、このバージョンのウィジェットに関連する特定のフィールドが含まれており、最終的には数十のバージョンが存在する可能性があります。

ユーザーはすべてのフィールドに入力し、「保存」を押します。

この時点で、フォーム フィールドを検証し、すべて問題なければ、「datacontext.saveChanges()」を介してエンティティを保存します。これは、「新規作成」フォーム ビューのビューモデルで行われます。

これは、widgetMaster を作成するときに正常に機能しますが、このプロセスをより詳細に制御する必要があると思います...id は「savechanges」によって作成された後、widgetVersion エンティティに外部キーを設定する必要がありますが、保存を試みる前にwidgetVersion エンティティ。

「datacontext.saveChanges()」はワンストップショップのように見えるので、保存したばかりのwidgetmasterから新しく作成されたIDでwidgetVersionエンティティを保存する方法について完全に困惑しています。

4

1 に答える 1

0

じゃあ。それが最善の方法かどうかはわかりませんが、これが私がそれを達成する方法です。もう少し詳しい情報については、このスタックオーバーフローの質問を参照してください: Breeze bug? savechanges() で主エンティティのみが指定されているにもかかわらず、関連エンティティを追加しようとしています

ビューモデルの保存方法 (ユーザーが新しいエンティティのフィールドにデータを入力できるようにするフォーム入力ビュー) は次のようになりました。

    var save = function () {
        isSaving(true);
        //1st save widgetMaster
        return datacontext.saveChanges(new Array(newWidgetMaster())).then(function (saveResult) {
            //set version entity to have master id
            newWidgetVersion().widgetMasterID(newWidgetMaster().id());
            return datacontext.saveChanges(new Array(newWidgetVersion())).fin(complete);
        }).fail(function (e) {
            //do something with the alert
        });

        function complete() {
            isSaving(false);
        }
    };
于 2013-09-24T20:05:10.523 に答える