Entity framework 实体框架在保存更改之前检查DbUpdateException

Entity framework 实体框架在保存更改之前检查DbUpdateException,entity-framework,savechanges,Entity Framework,Savechanges,如果您尝试将长度为500的字符串保存到Sql Server中的一列,该列是nvarchar(255),则会得到一个DbUpdateException 在调用SaveChanges()之前,是否有任何方法检查此错误?可能是在将实体添加到上下文时 在调用SaveChanges之前,是否有任何方法检查此错误?可能是在将实体添加到上下文时 对。可以对DbContext调用此方法,如下所示,但只有在实体类上使用 var validationResults = dbContext.GetValidation

如果您尝试将长度为500的字符串保存到Sql Server中的一列,该列是nvarchar(255),则会得到一个
DbUpdateException

在调用
SaveChanges()
之前,是否有任何方法检查此错误?可能是在将实体添加到上下文时

在调用SaveChanges之前,是否有任何方法检查此错误?可能是在将实体添加到上下文时

对。可以对
DbContext
调用此方法,如下所示,但只有在实体类上使用

var validationResults = dbContext.GetValidationErrors();

validationResults
将包含一个集合,因此如果为空,则跟踪的实体是有效的。然后立即调用
SaveChanges
不会引发有关数据验证的异常,但您仍然可以得到一些只能在服务器端检查的其他异常,例如并发异常、唯一或引用约束异常等。

正如下面的回答所述,是的,您可以这样做。但是,您确实应该在这些错误成为问题之前捕获它们。在输入接近上下文之前验证输入。查找字符串的长度并写入条件,如if(len>255)throwerr@DavidG是的,我听说你应该在进入上下文之前进行验证,但为什么呢?因为表演?太好了!StringLength属性有效!是否有任何方法可以使用数据注释属性来检查十进制长度?是的,它存在=>RangeAttribute。好的,但是如何定义0到16位的范围?@skjold可能会帮助您。