我们希望将当前日期时间放入数据库列。
我们有一个Web服务器场,Web服务器上的时间可能会有所不同,因此我们需要在数据库服务器上使用datetime。
我们有一个Not Null
日期时间列的数据库。此列的默认日期时间为当前时间。
当我们使用不包含datetime列的SQL语句插入数据时,这很正常。
来自实体框架:
not null
,则将日期时间设置为低日期,并将低日期插入数据库。null
,我们会在插入上获得一个例外,该值不能为空。我们可以使用数据库触发器修复此问题,如果插入值为低日期,则会将日期时间更改为当前日期时间。
有没有人有更好的解决方案?
答案 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
然后插入应该通过。