我首先使用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
列而无需手动设置?
答案 0 :(得分:5)
没有EF永远不会使用您的数据库默认值。原因是您的实体具有不可为空的DateTime
属性。默认情况下,此属性在.NET中分配的默认值为1.1.0001。 EF不知道您是否分配了该值,或者它是否为默认值,因此它始终将此值显式传递给数据库。如果使用可空类型也会发生相同的情况,但在这种情况下,EF将显式传递null。在这两种情况下,都不会应用来自数据库的默认值,因为仅当应用程序中的值未在insert命令中显式传递时才应用该值 - EF显式传递来自实体的所有值。
答案 1 :(得分:1)
您可以在Product
实体类构造函数
public class Product{
public Product(){
CreateDate =DateTime.Now;
}
}