Entity Framework Code First : Timestamp(Rowversion)以外で楽観的排他制御を行う

samatsu 7/9/2015 10712 N/A Code First

Entity Framework Code First で Timestamp 以外で楽観的排他制御を行う場合、ConcurrencyCheck 属性で排他制御に使用するフィールドを指定します。

サンプルクラスを下のように記載します。 コメントにしている Timesamp で修飾された RowVersion フィールドはtimestampe(rowversion)型を使用する場合に指定する例です。ConcurrencyCheck で複数のフィールドを使用する場合は、複数のフィールドに対して ConcurrencyCheck アトリビュートを指定します。下記コードサンプルでは、 CreatedOn フィールドにコメントアウトした ConcurrencyCheck を指定しています。

/// <summary> 
/// サンプルテーブル 
/// </summary> 
public class Sample 
{ 
    [Key] 
    public int ID { get; set; } 
 
    public string Data { get; set; } 
 
    // ConcurrencyCheckは複数指定できる 
    // [ConcurrencyCheck] 
    public DateTime CreatedOn { get; set; } 
 
    [ConcurrencyCheck] 
    public DateTime ModifiedOn { get; set; } 
 
    // rowversion, timestamp型を使用する場合 
    //[Timestamp] 
    //public byte[] RowVersion { get; set; } 
}