5

ASP.NETMVCアプリケーションでのEntityFrameworkとの同時実行の処理で指定されたソリューションを実装しようとしています。

記事によると:

部門エンティティへの追跡プロパティの追加

Models \ Department.csに、追跡プロパティを追加します。

[Timestamp] 
public Byte[] Timestamp { get; set; }

Timestamp属性は、この列がデータベースに送信されるUpdateおよびDeleteコマンドのWhere句に含まれることを指定します。

モデルファーストアプローチを使用しているため、EntityFrameworkを使用したタイムスタンプ列の作成で概説されている手順1〜5に従いました。

  1. EFのモデルのエンティティに「Timestamp」という名前のプロパティを追加します
  2. タイプをバイナリに設定します
  3. nullableをfalseに設定
  4. StoreGeneratedPatternをComputedに設定します
  5. 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がスローされるかどうかを確認しようとしました。そうではありません。私は何が間違っているのですか?理解するのを手伝ってください、ありがとう。

<code> Timestamp</code>プロパティのスクリーンショット

4

1 に答える 1

3

この問題は、HTTPセッションごとに1つのObjectContextがあったために発生しました。そのため、新しいタブを開いてテストしても、同時実行例外は発生しませんでした。

于 2012-05-22T12:37:14.310 に答える