0

現在、クライアント データベースから中央の DB ストアにデータを移行しようとしているプロジェクトがあります。次に、Web サービス メソッドを介してデータをクライアントに公開します。

私たちがやりたいことの 1 つは、データの T-SQL タイムスタンプ (または行バージョン) 列を利用することです。これにより、クライアントはデータのローカル バージョンを私たちのデータと比較してチェックできます。バージョン > 10" のデータ

Entity Framework はタイムスタンプ列をバイト配列として解釈するため、LINQ でコードを記述してバージョン > X のデータのすべての行を取得する最良の方法を理解できないため、これは少し問題があることがわかります。バージョンのバイト[]です。

疑似コードで

getdata(int checkVersion)
{
  return Shoppers.Where(s=>s.Version > checkVersion).ToList();
}

//==> need to convert the Version column from Byte[] to int somehow in Linq-Entities

1 つの提案は、バージョン (タイムスタンプ) 列を変換する bigint 型のテーブルに新しい計算列を作成することです。

テーブルに別の列を導入せずに、実際にLINQでこれを行う方法があるのだろうか?

4

1 に答える 1

0

このmsdn 記事を気に入っていただけると思います

既定では、Entity Framework はオプティミスティック コンカレンシー モデルを実装します。これは、データがクエリされてからデータが更新されるまでの間、データ ソース内のデータに対してロックが保持されないことを意味します。Entity Framework は、同時実行性をチェックせずに、オブジェクトの変更をデータベースに保存します。高度な同時実行性が発生する可能性があるエンティティの場合、エンティティは、次の例に示すように、ConcurrencyMode="fixed" の属性を使用して概念レイヤーでプロパティを定義することをお勧めします。

<Property Name="Status" Type="Byte" Nullable="false" ConcurrencyMode="Fixed" />

この属性を使用すると、Entity Framework は、変更をデータベースに保存する前に、データベースの変更をチェックします。競合する変更があると、OptimisticConcurrencyException が発生します。詳細については、「方法: オブジェクト コンテキストでデータの同時実行を管理する」を参照してください。OptimisticConcurrencyException は、ストアド プロシージャを使用してデータ ソースを更新するエンティティ データ モデルを定義するときにも発生する可能性があります。この場合、更新を実行するために使用されるストアード・プロシージャーがゼロ行が更新されたことを報告すると、例外が発生します。

于 2013-11-14T03:44:13.033 に答える