私は、インスタンス化されたクラスモデルを取得した.NET MVCのプラクティスが、既にポストされたフォームの値から入力されたプロパティを持つコントローラに渡されます。とても便利な。Reload()はEFエンティティを更新していません
[HttpPost]
public ActionResult DoTask(MyModel model)
投稿されたフォームデータからIDおよびその他のプロパティが設定されたモデルが到着します。 しかし、モデルを保存して、データベースにのみ存在する追加のプロパティにアクセスしたいとします。私はこの時点でモデルをリロードする必要があります。
これは、idに基づいてモデルからモデルを完全にリロードすると考えられます。しかし、これは私にとっては起こりません。モデルのプロパティはデータベースからロードされません。彼らはまだ空です。 db.Entry(model).Reload();
が私のために失敗している理由を私は理解していない
EDIT
。しかし、私はdbcontextを保存してから、モデルを再読み込みした後に処分することを提案し始めています。これは本当ですか?
編集
WHOOPS!私はそれがすべて間違っている。私は今私が変更をコミットするときそれを参照してくださいdb.SaveChanges()
私は実際にMVCコントローラによって設定されているプロパティだけでなく、モデル全体を上書きしています。私は間違ったパターンを持つ必要があります。変更されていないプロパティを上書きせずに新しい値を自分のデータベースに適用するにはどうすればいいですか?これは非常に疑問な質問に変わっています。予想通り
結論
ことが判明したとして、リロード()更新を行います。私の問題は、コントローラコンテキストで自動インスタンス化され、コントローラメソッドにパラメータとして渡されたモデルを使用して、dbcontextにSaveChangesを呼び出すときに、db行を上書きしていたことでした。その場合、割り当てられたプロパティと割り当てられていないプロパティの両方を上書きします。
私は今選択
model = db.Models.Single(x => x.ID == modelID);
をやっているし、その後のUpdateModel(それを動作させるために接頭辞を呼び出す)
UpdateModel(model, "myPrefix");
db.SaveChanges();
[Entity Framework:Ignore Columns]の複製が可能です(http://stackoverflow.com/questions/737520/entity-framework-ignore-columns) – bzlm