【问题标题】:Cannot insert the value NULL into column 'EntryDate', table 'eApps.Logs.dbo.Logs'; column does not allow nulls. INSERT fails无法将值 NULL 插入到列“EntryDate”、表“eApps.Logs.dbo.Logs”中;列不允许空值。插入失败
【发布时间】:2023-03-23 23:40:01
【问题描述】:

我收到此错误:

无法将值 NULL 插入到列“EntryDate”、表“eApps.Logs.dbo.Logs”中;列不允许空值。插入失败。

我有一个标准的添加功能到 EF 6

    public Logs AddLog(Logs p)
    {
        Logs.Add(p);
        SaveChanges();
        return p;
    }

我已将班级中的字段定义为:

    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    public DateTime EntryDate { get; set; }

我应该在我的控制器中填充这个字段吗?

【问题讨论】:

  • 指定为可空public DateTime? EntryDate { get; set; }
  • 表上的业务规则要求该字段不能为空
  • 您将无法写入该字段,因为它被标记为已计算

标签: entity-framework asp.net-web-api


【解决方案1】:

请注意,表中的列EntryDate 不允许为NULL。因此,您必须确保对象p 获得有效日期。其他选项可能是更改表架构并修改 EntryDate 列以接受 NULL。

【讨论】:

  • 该字段旨在作为数据库为每个日志生成的时间戳
  • 您可以创建一个约束以在添加记录时自动填充日期时间字段。您可以从 [link] (stackoverflow.com/questions/10720486/…) 获得帮助
  • 如果您使用 CodeFirst 生成架构,则将此属性添加到您的属性中:[SqlDefaultValue(DefaultValue = "getdate()")] 如果您首先使用数据库并且有架构预定义,然后正如 Manoj 指出的那样,将默认约束添加到您的表中。 DatabaseGenerated 属性只是告诉 EF 数据库将处理生成,但您需要设置数据库以生成该值。
【解决方案2】:

我在 SQL Server 中的 EntryDate 字段上添加了一个约束,以将该字段默认为 GETDATE()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多