EF 7数据库日期时间生成的值

时间:2016-02-01 08:32:07

标签: entity-framework entity-framework-core

我有这个模型

 public class Comment
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int CommentId { get; set; }

        public DateTime CreatedAt { get; set; }
        public DateTime LastEditedAt { get; set; }
    }

我试图让db生成CreatedAtLastEditedAt的值,所以在我使用的OnModelCreating DbContext方法中

modelBuilder.Entity<Comment>(c =>
            {
                c.Property(p => p.CreatedAt).ValueGeneratedOnAdd();
                c.Property(p => p.LastEditedAt).ValueGeneratedOnAddOrUpdate();
            });

尝试插入时,我会在SaveChanges()

中获得内部异常
{"Cannot insert the value NULL into column 'CreatedAt', table 'WX.dbo.Comment'; column does not allow nulls. INSERT fails."}

这是否意味着我必须手动为这两列分配值?

通过使LastEditedAt可以为空而修复

 public DateTime  CreatedAt { get; set; }
 public DateTime? LastEditedAt { get; set; }

并将SQL默认值设置为CreatedAt

  modelBuilder.Entity<Comment>(c =>
            {
                c.Property(p => p.CreatedAt).HasDefaultValueSql("GETUTCDATE()");
                c.Property(p => p.LastEditedAt).ValueGeneratedOnAddOrUpdate();
            });

2 个答案:

答案 0 :(得分:2)

您可以将DateTime设置为可空:DateTime?

答案 1 :(得分:-1)

我使用以下解决方案可以将值设置为创建和修改日期字段:

warning_upper: 130.4
action_upper: 132.1
warning_lower: 123.6
action_lower: 121.9

您应该在EntityFrameworkCore github存储库中查看此问题:

Issue3955

Issue4501

在这些链接中显示了几种解决创建/更新日期字段生成问题的方法。