1

これは、しばらくの間私を悩ませてきたより大きな問題の一部です (全体像については、Asp.Net MVC のモデルとしてエンティティを使用した「EntityCollection は既に初期化されています」というエラーを参照してください)。

しかし、私は、似たような問題に直面し、明らかに彼のニーズに合わせて解決した人がいる Web サイトを見つけました ( http://codeblog.shawson.co.uk/creating-an-order-order-details-style-form-usingを参照)。 -asp-net-mvc2-entity-framework/ )。試してみましたが、自分のコードと、Steven Sanderson によるチュートリアルで提供されたヘルパー メソッド (以前の投稿を参照) に合うように、いくつかの変更を加える必要がありました。

私は非常に近いようですが、完全ではありません:

        UpdateModel(consultant, "Consultant");

        if (vm.Programs != null) //Unnecessary? Can it even be null if it's initialized from the model?
            for (int i = 0; i < vm.Programs.Count; i++)
            {
                Program formProgram = vm.Programs[i];
                Program modelProgram = consultant.Programs.SingleOrDefault(x => x.Id == formProgram.Id);
                if (modelProgram == null)
                    _repository.AddProgram(formProgram);
                else
                    modelProgram = formProgram;
                UpdateModel(modelProgram); //Doesn't work. The modelProgram object does get updated with the correct property values, but it isn't saved to the repository...
            }
        _repository.Save();

これは上記のサイトの例に従い、modelProgram は変更されたプロパティで更新されますが、modelProgram オブジェクトがへの参照であっても、これらの値は Consultant オブジェクトの _repository.Save() でデータベースに保存されません。コンサルタントのプログラムオブジェクト...何が間違っていますか?

ちなみに、はっきりしない場合は、Entity Frameworkを使用しています。

(ところで、誰かが前の質問と全体像について意見を持っていれば、それも歓迎されますが、まだ解決されていません)。

助けてください、私は最近とても興奮していたMVCへの信頼を失っています...

更新: ここに間違いがあったようです: UpdateModel は実際には更新を行わず、modelProgram の別のオブジェクト (viewmodel 内のオブジェクト) を参照しただけなので、もちろん正しいプロパティ値がありました。私はまだこれを達成する方法についてのアイデアが欲しい...

4

1 に答える 1

0

_repository.Save()をforループ内に移動してみてください。

あなたの内面は正しいですか?modelProgramがnullの場合、UpdateModel(null)を実行しています。これはクラッシュし、何も保存されない理由を説明する可能性があります。

編集

{}を入れてみてください

            if (modelProgram == null)
               {
                 _repository.AddProgram(formProgram);
               }
            else                    
              {
                modelProgram = formProgram;                
                UpdateModel(modelProgram); 
               }
于 2011-02-25T19:10:17.877 に答える