ASP.NETMVCアプリケーションでのEntityFrameworkとの同時実行の処理で指定されたソリューションを実装しようとしています。
記事によると:
部門エンティティへの追跡プロパティの追加
Models \ Department.csに、追跡プロパティを追加します。
[Timestamp] public Byte[] Timestamp { get; set; }
Timestamp属性は、この列がデータベースに送信されるUpdateおよびDeleteコマンドのWhere句に含まれることを指定します。
モデルファーストアプローチを使用しているため、EntityFrameworkを使用したタイムスタンプ列の作成で概説されている手順1〜5に従いました。
- EFのモデルのエンティティに「Timestamp」という名前のプロパティを追加します
- タイプをバイナリに設定します
- nullableをfalseに設定
- StoreGeneratedPatternをComputedに設定します
- ConcurrencyModeをFixedに設定します
データベースモデルからコードを更新すると、Models\Department.csに次の内容が含まれるようになります
public virtual byte[] Timestamp
{
get;
set;
}
次に、メタデータクラスを使用してTimestamp属性を指定しました。
// Metadata for Department entity
public class DepartmentMetadata
{
[Timestamp]
public byte Timestamp { get; set; }
}
Q1。Timestamp
行を編集した場合に列の値が変化するかどうかをテストしました。そうではありません。
編集1この問題は、SQL Serverの列タイプがbinary
であったために発生しましたが、タイプはであるはずtimestamp
です。データ型を変更すると、タイムスタンプ列が更新されない問題が修正されました。
Q2。同じエンティティを([新しいタブで開く]を使用して)変更して、OptimisticConcurrencyException
がスローされるかどうかを確認しようとしました。そうではありません。私は何が間違っているのですか?理解するのを手伝ってください、ありがとう。