確かに、トリガーなしで行う方法があります。トリガーなしでそれを行うことは、Entity Frameworkプロバイダーによってサポートされているすべてのデータベースで動作します。
残念ながら、Designer Firstアプローチについてはわかりませんが、Code FirstではこれはおそらくDesigner First、おそらく部分クラスを使用しています)。新しいEntity Frameworkコアでのみサポートされるため、可能であれば、Code Firstを使用することをお勧めします。
モデル:
public abstract class ConcurrencyTracker
{
[ConcurrencyCheck]
public long LastChange { get; set; }
[NotMapped]
public DateTime LastChangeTime
{
set
{
long timestamp = value.Ticks - new DateTime(1970, 1, 1).Ticks;
timestamp = timestamp/TimeSpan.TicksPerSecond;
LastChange = timestamp;
}
}
}
public class Product : ConcurrencyTracker
{
public int Id { get; set; }
public string Name { get; set; }
}
コンテキスト:オプティミスティック同時実行があるので
public override int SaveChanges()
{
var currentTime = DateTime.Now;
var changed = ChangeTracker.Entries<ConcurrencyTracker>().Where(c => c.State != EntityState.Unchanged);
if (changed != null)
{
foreach (var item in changed)
{
item.Entity.LastChangeTime = currentTime;
}
}
return base.SaveChanges();
}
EFは、製品モデルのすべての更新でLastChange列が含まれます。
[SQL Server:Oracleの同等のRowVersion](http://stackoverflow.com/questions/20487657/sql-server-rowversion-equivalent-in-oracle)の可能な複製 – Fran
あなたは達成しようとしていることを詳しく説明できますか? Oracleは、非常に洗練された大部分の自動同時実行メカニズムを備えています。 – BobC