素晴らしい質問です!
あなたへの最初の質問は、「追加の「静的プロパティ」のペイロードの重みが実際に問題であると確信していますか?」です。私はあなたに尋ねなければなりません...私は自分自身に尋ねなければならないので...私は問題を予測して時期尚早に解決する傾向があるからです. 測定後、その作業と心配は、現場でのアプリケーションにとってはまったく問題にならないことがわかりました。私の無礼をお許しください。
あなたが本当に問題を抱えていると仮定しましょう。オブジェクトが非常に重く (おそらく画像データを使用)、モデル内でそれらを 1 対 1 の関係を持つ複数のクラスに分割episode
することはできません。あなたは 1 つの大きな太ったクラスで立ち往生しています。私はこれが起こることを知っています。チェックしてるだけ。Episode
EpisodeDetail
Epsiode
あなたはあなたが望むことをすることができます。Breeze では、このシナリオをより簡単にしたいと考えています。今日、それを行うための「OK」な方法があります (ハックと呼ぶ人もいます)。その概要をここにレイアウトします。あなたはそれを試すことができます...そしてそれを改良する方法を私たちに知らせてください.
保存するオブジェクトEpisodeSaveDto
の形状を表すDTO クラス ( ?) をサーバー上に作成します。保存する と プロパティが必要ですEpisode
。Id
これは実際のエンティティではないため、サーバーから送信される通常のメタデータの一部にはなりません。そのため、BreezeJS クライアントの JavaScript のメタデータにその DTO オブジェクトを記述します。その後、Breeze はあなたEpisodeSaveDto
をエンティティとして扱います。この手法の例については、 「NoDb」サンプルを参照してください。
のインスタンスを作成EpisodeSaveDto
し、変更を加えます。新しいインスタンスを追加するのではなく、更新しているので、メソッドで EntityState 設定シグネチャをcreateEntity
使用します。
var episode = manager.createEntity("EpisodeDto",
{ id: origEpisode.id,
foo: 変更されたFooValue },
EntityState.Modified);
サーバーのカスタム (派生)EFContextProvider
で、メソッドをオーバーライドしますBeforeSaveEntities
。このメソッドは、変更されたエンティティのディクショナリをタイプ別に並べて受け取ります。
変更のコレクションを削除し、EpisodeSaveDto
それらを適切なEpisode
エンティティに処理して保存します。EF または SQL Db を使用していない場合は、 "NoDb" SampleContextProvider
に示されているように、...の実装でこれを行うことになります。
すぐに保存できるEpisode
エンティティのコレクションを変更されたエンティティのディクショナリに追加し、それらを EF コンテキストにもアタッチします。
サーバー上の Breeze.NET は、製造さEpisode
れたエンティティをサーバーに保存し、着信を無視しますEpisodeSaveDto
(保存方法がわからないため)。
自白:私はこれを記憶から書いていますが、ステップ#6で少し曖昧です. 私はあなたがアイデアを得ると信じています。Breeze.NET をごまかしています。
最初に言ったように、このシナリオをもっと簡単にしたいと思います。エンティティ セットを受け入れて返すことができる "コマンド" のサポートが組み込まれていることを期待しています。これが私たちがすべきことだと思う場合は、Breeze User Voiceに投票してください。