mvcアプリケーションで私のDBにアクセスするために亜音速を使用しています。 mvcモデルバインディングを使用してレコードを更新しようとすると、列のどれもがダーティとマークされていないため、レコードは更新されません。mvcモデルバインディングを使用してSubsonicアップデートを使用する方法?
私は亜音速のコードを微調整することにより、汚れなど、すべての列をマークする手動で試してみましたが、時々私は私がダーティとしてそれらすべてをマークしたくないので、いくつかのプロパティを更新します。
これを行う最善の方法は何ですか?
public void Update(IDataProvider provider, Boolean forceUpdate){
if(this._dirtyColumns.Count>0 || forceUpdate){
if(forceUpdate)
this._dirtyColumns = this.Columns.ToList();
_repo.Update(this,provider);
_dirtyColumns.Clear();
}
OnSaved();
}
EDIT:私はこのコードを試してみた
が問題で参照するには
[HttpPost]
public ActionResult Update(mapping m)
{
m.SetIsNew(false);
m.Update(true); // here i tweaked the subsonic code passing true sets all the columns to be dirty and updates the record even though isLoaded=false
return RedirectToAction("New");
}
これは私が亜音速のコードを微調整する方法である:
この
は自分の行動であります嘘:var m = new mapping { ID = 2, Name = "33" };
m.SetIsNew(false);
m.Save();
これも機能しませんが、列が汚れていません。オブジェクトの初期化子を使用すると、setterが呼び出されないため、列がダーティに設定されていないようです。
は、私は、デフォルトのmvc.netモデルは、このような作品を結合することを前提となり、レコードが更新されていない理由です。
編集2
私の最初の編集はdyork12が指摘したように@間違っています。 サブソニックは 'isLoaded'フラグを使用します。このフラグがfalseに設定されている場合、プロパティはダーティーとして設定されません。これはレコードをロードするときに亜音速で使用され、読み込み中にプロパティを設定してダーティーとして設定しないようにします。
しかし、私の質問は、自動モデルバインディングを使用してmvc.netビューから亜音速のオブジェクトを編集するための最適な回避策は何か残っています。
ViewSonicで生成されたオブジェクトをバインドしているか、ViewModelを使用していますか?これを見たことがありますか? http://stackoverflow.com/questions/5491733/subsonic-and-automapper-dirtycolumns-collection-is-empty-therefore-cant-updat – DaveHogan
なぜ汚れとマークされていませんか?そのコードフラグメントはActiveRecordに由来し、カラムプロパティにバインドするとすべて正常に動作するはずです。何をやっているのですか?もっとコードをお願いします。 –
@ dyork12:私は '編集'に答えました。 – Daniel