为什么EF DataBase First不使用getdate()?

时间:2012-04-24 05:28:38

标签: entity-framework ef-database-first

我首先使用EF 4.1和数据库。

示例表:

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

当我添加一个新行时,我得到一个关于DateTime类型溢出的异常。

getdate()数据库设置无效。

我必须将storeGeneatePattern字段的createdate属性设置为Computed

有没有办法让EF自动生成DateTime列而无需手动设置?

2 个答案:

答案 0 :(得分:5)

没有EF永远不会使用您的数据库默认值。原因是您的实体具有不可为空的DateTime属性。默认情况下,此属性在.NET中分配的默认值为1.1.0001。 EF不知道您是否分配了该值,或者它是否为默认值,因此它始终将此值显式传递给数据库。如果使用可空类型也会发生相同的情况,但在这种情况下,EF将显式传递null。在这两种情况下,都不会应用来自数据库的默认值,因为仅当应用程序中的值未在insert命令中显式传递时才应用该值 - EF显式传递来自实体的所有值。

答案 1 :(得分:1)

您可以在Product实体类构造函数

中执行此操作
public class Product{
  public Product(){
     CreateDate =DateTime.Now;
  }
}