私は、Oracle バックエンドと MS SQL Server バックエンドの間で使用される EF コードの最初の POCO を構築しています。どちらのデータベース バックエンドでも動作する Timestamp プロパティに取り組む正しい方法を見つけるのに問題があります。
MS SQL Server では、次のような一般的なプロパティを使用する必要があります。
[Timestamp]
public byte[] Timestamp {get;set;}
そして、流暢なマッピングでは、次のようになります
map.Property(p => p.Timestamp).IsRowVersion();
ただし、Oracle では、共通のプロパティ タイプを次のように変更する必要があります。
public int Timestamp {get;set;}
そして、流暢なマッピングでは、次のようになります
map.Property(p => p.Timestamp).HasColumnName("ORA_ROWSCN").HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed).IsConcurrencyToken();
したがって、タイムスタンプは 8 バイトであるため、データ型を long に変更できるのではないかと最初に推測しましたが、SqlServer はマッピングが気に入らなかったのです。
次に推測するのは、Timestamp と Ora_RowScn をあきらめて、独自の Optimistic Concurrency プロパティを作成することです。SqlとOracleの両方で機能する幸せなモデルを持つ方法を知っていますか? ありがとう。