データベースには、SQL タイムスタンプである同時実行チェック フィールドがあります。
かみそりビューを使用している場合
@Html.HiddenFor(m => m.DatabaseRowVersion)
Base64 文字列にエンコードされ、保存アクションでモデルにバインドされます。
Jsonリクエストでフィールドを取得した場合
Json(queryable.Select(f => new { DatabaseRowVersion = f.DatabaseRowVersion }))
結果のJsonは8フィールドのバイト配列であり、保存アクションでモデルにバインドすることはできません。シリアル化される前に、Linq to Entities でフィールドを Base64 文字列として選択する方法はありますか?
私の解決策は、8 つのフィールド バイト配列を Base64 文字列に変換するための見栄えの悪い JavaScript 関数ですが、これはきれいではなく、元の Json リクエストが既にエンコードされているフィールドを返すことを望みます。私が試したすべてのことで、サポートされていない Linq to Entities 関数の例外が発生します。私はメモリ内でそれをしたくありません.SQLサーバー上でそれを実現するためのある種のEntities.Functionsスタイルを見つけたいと思っています。
私が気にしないもう1つの方法は、8フィールドのバイト配列をモデルのbyte []にバインドする何らかの方法で保存リクエストを投稿するようにjQueryを取得できる場合ですが、私が試したすべてが機能しません。私はすべての traditional: true および contentType: "application/json; charset=utf-8" を投稿で試しましたが、Ajax 投稿で配列を正常にバインドする他のアクションと同様に成功しませんでした。モデル バインダーは、モデルの byte[] フィールドのバイト配列ではなく、Base64 文字列を想定しているように見えるため、他の配列のようには機能しないようです。