c# - 如何在 saveChanges() 中获取错误的实体
问题描述
当我可以saveChanges()
为某些实体而一个实体是错误的时,我会去exception
捕获并且我想插入记录stateEntity
错误的内容,如果我能得到特定的实体,我就可以做到。用于添加、更新和删除的保存方法
我可以抓住错误的实体吗?
我的保存方法:
public long save(IResponse res, Context context)
{
try
{
foreach (Entity ent in response.Entities)
{
context.Entry(ent).State = ent.getEntityState();
}
return context.SaveChanges();
}
catch (Exception ex)
{
string errorMessages = ex.InnerException.InnerException.ToString();
res.ExceptionDBDesc = errorMessages;
res.WrongEntState= ??? //add/modify/remove
}
解决方案
试试看 :
try
{
_context.SaveChanges();
}
catch (System.Data.Entity.Validation.DbEntityValidationException dbEx)
{
Exception raise = dbEx;
foreach (var validationErrors in dbEx.EntityValidationErrors)
{
foreach (var validationError in validationErrors.ValidationErrors)
{
string message = string.Format("{0}:{1}", validationErrors.Entry.Entity.ToString(), validationError.ErrorMessage);
//raise a new exception inserting the current one as the InnerException
raise = new InvalidOperationException(message , raise);
}
}
throw raise;
}
推荐阅读
- apache-kafka - Terraform:如何使用定位 Bitnami Kafka AMI ID
- java - 如何编写 SQL 查询以使用 IN 子句获取第一条记录(最新)?
- javascript - 缓慢读取时,Javascript fetch ReadableStream 不会减慢网络速度
- c# - 授予守护进程访问权限以读取用户邮件
- python - 使用随机矩阵变量定义自定义 PyMC 分布
- php - 如何限制laravel中行的值插入?
- c# - C# encrypt/decrypt methods which are equivalent to PHP7 openssl
- javascript - 复制状态以在子项中间接对其进行编辑
- c - 为什么 system() 存在?
- php - MySQLi 显示到 PHP 代码