【问题标题】:EntityValidationErrors inserting null datetime valueEntityValidationErrors 插入空日期时间值
【发布时间】:2015-06-08 08:21:37
【问题描述】:

我正在尝试将空值保存到 MS SQL 数据库上的日期时间列。 每当抛出异常并且 dob 属性设置为 null 时,db.savechanges 就会抛出以下错误:

一个或多个实体的验证失败。看 'EntityValidationErrors' 属性以获取更多详细信息。

这似乎是多余的,但holterContents.dob = null as DateTime?; 会有所作为吗?

try
{
    holterContents.dob = new DateTime(Convert.ToInt32(infopatlines[38]), Convert.ToInt32(infopatlines[39]),
    Convert.ToInt32(infopatlines[40]));
}

catch (Exception a)
{
    holterContents.dob = null;
    Log.Error(a.Message);
}
db.C_HOLTERCONTENTS.Add(holterContents);
db.savechanges();

【问题讨论】:

    标签: c# .net entity


    【解决方案1】:

    它会被 Catch 块吗?

    如果它不会捕获块,请检查我们的日期“01/01/0001 12:00:00 AM”。如果它是这样来的,那么你需要将它设置为'null'

    使用

    将您的 Save 块放入 Try 块中
    catch (DbEntityValidationException ex)
            {
                // Retrieve the error messages as a list of strings.
                var errorMessages = ex.EntityValidationErrors
                      .SelectMany(x => x.ValidationErrors)
                      .Select(x => x.ErrorMessage);
                // Join the list to a single string.
                var fullErrorMessage = string.Join("; ", errorMessages);
                // Combine the original exception message with the new one.
                var exceptionMessage = string.Concat(ex.Message, " The validation errors are: ", fullErrorMessage);
                // Throw a new DbEntityValidationException with the improved exception message.
                throw new DbEntityValidationException(exceptionMessage, ex.EntityValidationErrors);
            }
    

    检查即将发生的错误类型...

    【讨论】:

    • 它将捕获块,并且我已将日志记录设置到日志表。我可以看到它在捕获时更新为 Null,或者我可以使用新的日期时间将其更改为更合法的(1995,1,1) 我想我可能找到了罪魁祸首,holtercontents 的另一个属性是一个带有 100 个尾随空格的字符串,它试图插入到 nvarchar(50) 列中。我会测试并回复你,谢谢你的帮助
    猜你喜欢
    • 2012-02-28
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多