私はMVCのEFで新しくなっています。私は、アプリケーションで同時性チェックを実装する必要があります。cshtmlページの 'TimeStamp'変数をAJAXコール経由でコントローラに渡します
私は並行処理がEFに処理するためのビルトイン対応無しに関するMSDNヘルプを以下ました:http://www.asp.net/mvc/overview/getting-started/getting-started-with-ef-using-mvc/handling-concurrency-with-the-entity-framework-in-an-asp-net-mvc-application
しかし、私の場合、私は部分的な更新をやっているので、私は、サーバー側を呼び出すためにAJAXを使用していますそれを行う方法。このサーバーサイドのメソッドでは、並行性チェックを実装する必要があります。 Entityクラスで
ALTER TABLE dbo.Job
ADD RowVersion rowversion NULL;
:私の中
[Timestamp]
public byte[] RowVersion { get; set; }
私はタイムスタンプ列を作成し、私のDBで
まず:私は私のコードでは、必要な変更を加えたチュートリアル後
マッピングクラス(流暢なAPIを使用):
this.Property(t =>
t.RowVersion).HasColumnName("RowVersion").IsConcurrencyToken();
私のコントローラで最後に
function UpdateJobTransferStatus(jobTransferStatusId, newJobTransferSatusId, currentAction, statusName) {
var hdnJobId = $("#JobId").val();
//var hdnRowVersion = $("#RowVersion").val();
var hdnAccountingId = $("#hdnAccountingSystemId").val();
$.ajax(
{
type: "GET",
url: ResolveUrl("~/Api/Job/UpdateJobTransferStatus"),
dataType: "json",
contentType: "application/json; charset=utf-8",
data: { jobId: hdnJobId, currentAction: currentAction, jobTransferStatusId: newJobTransferSatusId, accountingSystemId: hdnAccountingId },//,rowVersion: hdnRowVersion },
success: function (data) {
GetPreviousOrNextStatus(jobTransferStatusId, currentAction, statusName, hdnAccountingId);
},
error: function (result) {
}
});
}
(上:JSファイル(AJAX呼び出し)で
@Html.HiddenFor(x => x.RowVersion)
:3210 私の見解モデルクラスで
:私のビューファイルで
[Timestamp]
public byte[] RowVersion { get; set; }
私のajax呼び出し): MSDN(using System.Data.Entity.Infrastructure;
)の名前空間を追加しました
[System.Web.Http.HttpGet]
public HttpResponseMessage UpdateJobTransferStatus(int jobId, int currentAction,
int jobTransferStatusId, short accountingSystemId, byte[] rowVersion)
私は関係なく、常に私はAJAX呼び出しかでのparamとして値を送信した場合の、「byte[] rowVersion
」の「null
」を取得しています(私はここに貼り付けたことを、私のコードスニペットにコメントに保管しました)。
成功した挿入/更新の実行ごとにDBで列が更新されていることを確認しました。また、ビューモデルは各ページの負荷でこのRowVersion列のDBから最新の値を取得しています。
MSDNの例では、フォームを提出しましたが、私はAJAX呼び出しを使用していますが、すべての面を同じにしていました。
ビューモデルオブジェクト全体を送信すると私の仕事をするかもしれませんが、オブジェクト全体を部分的に更新する必要はありません。
rowVersion
をajaxコールに渡すにはどうすればよいですか?
ありがとうポール、私はそれを提出した直後にフォーマットミスを認識しましたが、私よりも速かったです。 :D –