C# 实体框架4和SYSUTCDATETIME()
我的数据库(MS SQL 2008)中有一个表,其列C# 实体框架4和SYSUTCDATETIME(),c#,tsql,entity-framework,entity-framework-4,C#,Tsql,Entity Framework,Entity Framework 4,我的数据库(MS SQL 2008)中有一个表,其列SYSUTCDATETIME()的默认值为 其想法是在创建新记录后立即自动添加日期和时间 我使用EF4创建了我的概念模型,并且在插入模式下创建了一个带有DetailsView控件的ASP.PAGE 我的问题: 当我创建新记录时。EF无法插入实际日期和时间值,但它会插入该值0001-01-01 00:00:00.00 我想EF不能使用数据库中定义的SYSUTCDATETIME() 你知道怎么解决吗?谢谢 这里是我的SQL脚本 CREATE
SYSUTCDATETIME()
的默认值为
其想法是在创建新记录后立即自动添加日期和时间
我使用EF4创建了我的概念模型,并且在插入模式下创建了一个带有DetailsView控件的ASP.PAGE
我的问题:
当我创建新记录时。EF无法插入实际日期和时间值,但它会插入该值0001-01-01 00:00:00.00
我想EF不能使用数据库中定义的SYSUTCDATETIME()
你知道怎么解决吗?谢谢
这里是我的SQL脚本
CREATE TABLE dbo.CmsAdvertisers
(
AdvertiserId int NOT NULL IDENTITY
CONSTRAINT PK_CmsAdvertisers_AdvertiserId PRIMARY KEY,
DateCreated dateTime2(2) NOT NULL
CONSTRAINT DF_CmsAdvertisers_DateCreated DEFAULT sysutcdatetime (),
ReferenceAdvertiser varchar(64) NOT NULL,
NoteInternal nvarchar(256) NOT NULL
CONSTRAINT DF_CmsAdvertisers_NoteInternal DEFAULT ''
);
我的临时解决方案: 请大家帮我一下 e、 值[“DateCreated”]=DateTime.UtcNow 更多信息请点击此处:
问题是EF不知道该默认值,所以它会将.NET默认值发送到数据库。可以强制EF使用DB中的默认值,但必须手动修改EDMX文件(XML不是设计器)。您必须在EDMX的SSDL部分中找到列定义,并添加StoreGeneratedPattern=“Computed”属性。您还必须在CSDL部件中执行相同的操作(这可以在designer中完成)
此设置将有几个问题。首先,数据库中的每次更新都会删除您在SSDL中的更改。此外,每次插入和更新都将触发select,该选项将重新查询此列中的值(因为EF认为它每次都是计算出来的)。在ASP.NET页面中,当您创建记录时,您实际上是在为
DateCreated
值添加值。我看到你现在正在这样做,这是你首先需要做的
所以我猜前面发生的事情是,您正在创建新记录,但没有为DateCreated
字段设置值。但是由于DateTime
的默认值为0001-01-01 00:00:00.00
,因此您得到了该行为
默认值仅适用于插入行,但不指示如何处理DateCreated
字段的情况。但EF的工作方式总是为此提供一个值(除非您编写自己的insert查询来覆盖生成的查询)
您还可能在任何时候更新记录时更改该值,因为EF不知道如何处理它。正是我所想的,因此我保持简单并使用DateTime.UtcNow。我唯一的问题是:如果用户更改了其SO的日期时间,是否会影响将日期时间值传递给EF?谢谢