バージョン 3 の SQLite データベースがあり、C# を使用してこのデータベースを使用するアプリケーションを作成しています。
同時実行のためにテーブルでタイムスタンプ フィールドを使用したいのですが、新しいレコードを挿入すると、このフィールドが設定されておらず、null になっていることに気付きました。
たとえば、MS SQL Server でデータベースによって更新されるタイムスタンプ フィールドを使用する場合、自分で設定する必要はありません。これはSQLiteで可能ですか?
フィールドのデフォルト値を宣言するだけです:
CREATE TABLE MyTable(
ID INTEGER PRIMARY KEY,
Name TEXT,
Other STUFF,
Timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
);
ただし、INSERT
コマンドでこのフィールドを明示的に に設定するNULL
と、 に設定されNULL
ます。
上記の回答を補足するには...
EF を使用している場合は、Data Annotation [Timestamp] でプロパティを飾り、コンテキスト クラス内のオーバーライドされた OnModelCreating に移動し、次の Fluent API コードを追加します。
modelBuilder.Entity<YourEntity>()
.Property(b => b.Timestamp)
.ValueGeneratedOnAddOrUpdate()
.IsConcurrencyToken()
.ForSqliteHasDefaultValueSql("CURRENT_TIMESTAMP");
このテーブルに挿入されるすべてのデータにデフォルト値を作成します。