2012-04-24 6 views
5

私はEF 4.1でデータベースを使用しています。EF DataBaseがgetdate()を最初に使用しないのはなぜですか?

例テーブル:

CREATE TABLE dbo.Product(
    [ID] [int] IDENTITY(1,1) not null, 
    Title nvarchar(200) not null, 
    CreateDate datetime not null default(getdate()), 
) 

私は新しい行を追加すると、私はのDateTime型オーバーフローに関する例外を取得します。

データベース設定のgetdate()が無効です。

createdateフィールドのstoreGeneatePatternプロパティをComputedに設定する必要があります。

EFが自動的にDateTime列を手動で設定せずに生成させる方法はありますか?

あなたの Productエンティティクラスのコンストラクタでそれを行うことができます

答えて

5

ませEFは、データベースのデフォルトを使用することはありません。その理由は、あなたのエンティティがヌル入力可能なDateTimeプロパティを持っているからです。このプロパティは、デフォルトで.NETのデフォルト値1.1.0001を割り当てています。 EFは、その値を割り当てたかどうか、またはデフォルト値であるかどうかを認識しないため、常にこの値を明示的にデータベースに渡します。 nullable型を使用すると同じことが起こりますが、この場合、EFは明示的にnullを渡します。どちらの場合も、データベースからのデフォルト値は適用されません。これは、アプリケーションからの値が挿入コマンドで明示的に渡されない場合にのみ適用されるためです。

+0

私にとって深刻なアプリケーションでEFを使用するのに十分な理由はありません。 – xr280xr

1

public class Product{ 
    public Product(){ 
    CreateDate =DateTime.Now; 
    } 
} 
+1

私はこれを知っていますが、複数の類似したフィールドがある場合、作業負荷は非常に大きくなります。 EFは手動で設定することなく、データベース設定の「getdate()」を使用できますか? –

関連する問題