簡単にするために、次のようなSQLServerCEテーブルがあるとしますWidgets
。
create table [Widgets] (
[Id] int not null primary key,
[Created] datetime not null default getdate())
Created
列の値を指定せずに挿入すると、期待どおりに機能します。
insert into [Widgets] ([Id]) values (1)
と呼ばれるEntityFrameworkモデルを生成した後、Database
次のコードを記述します。
Database db = new Database();
db.Widgets.AddObject(new Widget { Id = 2 });
db.SaveChanges();
しかし、それは例外を引き起こします: EFが列をnull許容ではないとAn overflow occurred while converting to datetime.
見なすという事実までこれを追跡したので、newが構築されると、そのプロパティはデフォルト(0001-01-01 12:00:00 )に設定されます)、これはSQLServerCEの有効範囲外です。Created
DateTime
Widget
Created
DateTime
では、上記のC#のサンプルを機能させるにはどうすればよいですか?データベーススキーマを変更したくない。Created
コンストラクターでプロパティをDateTime.Now
に設定できることはわかっていますWidget
が、aが作成されてから実際にデータベースに挿入されるまで、数分かかる場合がWidget
あります。これは、実際にキャプチャしたい時間です。
更新:とに設定しようとしStoreGeneratedPattern
ましIdentity
たComputed
が、例外が発生します:Server-generated keys and server-generated values are not supported by SQL Server Compact
。デフォルト値はSQLServerCEで機能するため、EntityFrameworkの制限である必要があります。(どうやらこれはSQL Server CE 4.0で修正されています。)