【问题标题】:Entity Framework 4 and SYSUTCDATETIME ()实体框架 4 和 SYSUTCDATETIME ()
【发布时间】:2011-02-21 23:26:58
【问题描述】:

我的数据库 (MS SQL 2008) 中有一个表,其中列SYSUTCDATETIME ()默认值

想法是在创建新记录后立即自动添加日期和时间。

我使用 EF4 创建了我的概念模型,并在 INSERT MODE 下创建了一个带有 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.Values["DateCreated"] = DateTime.UtcNow;

更多信息在这里:

http://msdn.microsoft.com/en-us/library/bb387157.aspx

How to use the default Entity Framework and default date values

http://msdn.microsoft.com/en-us/library/dd296755.aspx

【问题讨论】:

    标签: c# tsql entity-framework entity-framework-4


    【解决方案1】:

    问题在于 EF 不知道该默认值,因此它将 .NET 默认值发送到数据库。可以强制 EF 使用 DB 中的默认值,但您必须手动修改 EDMX 文件(XML 不是设计器)。您必须在 EDMX 的 SSDL 部分找到列定义并添加 StoreGeneratedPattern="Computed" 属性。您在 CSDL 部分也必须相同(这可以在设计器中完成)。

    这个设置会有几个问题。首先,数据库的每次更新都会删除您在 SSDL 中的更改。此外,每次插入和更新都会触发选择,该选择将从该列重新查询值(因为 EF 认为每次都会计算它)。

    【讨论】:

    • 正是我的想法,所以我保持简单并使用 DateTime.UtcNow。我唯一的问题是:如果用户更改其 SO 的日期时间,是否会影响将 DateTime 值传递给 EF?谢谢
    【解决方案2】:

    在您的 ASP .NET 页面中,当您创建记录时,您实际上是在为 DateCreated 值添加一个值。我看到你现在正在这样做,这是你首先需要做的。

    所以我猜之前发生的事情是您正在创建新记录,但没有为 DateCreated 字段设置值。但是,由于 DateTime 的默认值为 0001-01-01 00:00:00.00,这就是您出现这种行为的原因。

    默认值仅适用于插入行但不指示如何处理 DateCreated 字段的情况。但是 EF 的工作方式总是会为此提供一个值(除非您编写自己的插入查询来覆盖生成的查询)。

    您还可能在任何时候更新记录时更改该值,因为 EF 不知道如何处理它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多