これは、しばらくの間私を悩ませてきたより大きな問題の一部です (全体像については、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 内のオブジェクト) を参照しただけなので、もちろん正しいプロパティ値がありました。私はまだこれを達成する方法についてのアイデアが欲しい...