【问题标题】:Inserting current Database date time via Entity framework通过实体框架插入当前数据库日期时间
【发布时间】:2014-04-09 03:51:23
【问题描述】:

我们希望将当前日期时间放入数据库列中。

我们有一个网络农场,其中网络服务器上的时间可能会有所不同,因此我们需要使用数据库服务器上的日期时间。

我们有一个带有Not Null 日期时间列的数据库。此列的默认日期时间为当前时间。

当我们使用不包含 datetime 列的 SQL 语句插入数据时,这可以正常工作。

来自实体框架:

  • 如果我们将日期时间定义为not null,则将日期时间设置为低日期,并将低日期插入数据库。
  • 如果我们将日期时间定义为null,我们会在插入时得到一个值不能为空的异常。

如果插入值为低日期,我们可以使用将日期时间更改为当前日期时间的数据库触发器来解决此问题。

谁有更好的解决方案?

【问题讨论】:

    标签: c# sql datetime db2 entity-framework-5


    【解决方案1】:

    由于该列具有数据库设置的默认值,您可以简单地将 datetime 列标记为已计算:

    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    property DateTime Date { get; set; }
    

    或在流畅的映射中

    this.Property(t => t.Date)
        .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);
    

    EntityTypeConfiguration 类中,或

    modelBuilder.Entity<MyClass>().Property(t => t.Date)
        .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);
    

    OnModelCreating 覆盖中。

    这将导致 EntityFramework 在每次读取、插入或更新记录时读取列的值,但它永远不会设置它。

    【讨论】:

    • 感谢您的回答,如果我们有 EDMX 文件,这也可以吗?每次 edmx 更改并重新生成代码时,我们是否需要读取属性?
    • 在edmx中,您可以在设计器的一列属性窗口中将StoreGeneratedPattern设置为Computed。这将在模型更新后继续存在。
    • 谢谢,我们正在使用 DB2。 DB2 驱动程序不支持“Computed”,但我们可以使用“Identity”。虽然不是Identity列,但解决了向数据库发送low date的问题。
    【解决方案2】:

    一种方法是使用 UTC dateTime 所以在 C# 中你可以使用

    DateTime.UtcNow
    

    你也可以设置

    DateTime dateTime = new DateTime();
    dateTime = SqlDateTime.MinValue.Value;
    

    你甚至可以创建扩展方法:

    public static class DateExtension
        {
            public static DateTime SqlValidDateTime(this DateTime d)
            {
                return SqlDateTime.MinValue.Value;
            }
        }
    

    也用于:

    如果我们将 datetime 定义为 null,我们会在插入时遇到异常 该值不能为空。

    你应该通过而不是 null ->

    DbNull.Value 
    

    然后插入应该通过。

    【讨论】:

    • 从@Shiraz 的问题看来,他想要服务器数据库中的当前日期时间,而不是可以分配的最小日期时间......
    • @yosoy 是正确的,这段代码会从网络服务器上的系统时钟读取时间,所以很遗憾它没有帮助
    猜你喜欢
    • 1970-01-01
    • 2022-01-14
    • 2011-02-04
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 2015-07-31
    • 2019-04-19
    • 1970-01-01
    相关资源
    最近更新 更多