通过Entity框架插入当前数据库日期时间

时间:2014-03-06 13:15:50

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

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

我们有一个Web服务器场,Web服务器上的时间可能会有所不同,因此我们需要在数据库服务器上使用datetime。

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

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

来自实体框架:

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

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

有没有人有更好的解决方案?

2 个答案:

答案 0 :(得分:5)

由于列具有数据库设置的默认值,您只需将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在每次读取,插入或更新记录时读取列的值,但它永远不会设置它。

答案 1 :(得分:-1)

一种方法是使用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 - &gt;

DbNull.Value 

然后插入应该通过。