【发布时间】:2015-12-24 17:18:09
【问题描述】:
我在尝试使用以下代码将对象保存到数据库时收到DbEntityValidationException:
public void Save(Employee emp)
{
repository.Insert(emp);
unitOfWork.SaveChanges();
}
然后我尝试使用以下方法抛出异常的详细信息:
try
{
repository.Insert(emp);
unitOfWork.SaveChanges();
}
catch (DbEntityValidationException ex)
{
var errorMessages = ex.EntityValidationErrors
.SelectMany(x => x.ValidationErrors)
.Select(x => x.ErrorMessage);
var fullErrorMessage = string.Join("; ", errorMessages);
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);
}
现在我收到以下错误,我似乎无法在任何地方看到 System.Data.Entity.Validation 添加到我的参考以清除此错误消息:
找不到类型或命名空间名称“DbEntityValidationException”(您是否缺少 using 指令或程序集引用?)
我该如何解决这个问题?
【问题讨论】:
-
感谢您的快速回答,但我收到了 DbEntityValidationException 本身的错误。我的问题是,如何解决我帖子中的最后一条错误消息?
-
在您的
Save方法运行的程序集中是否引用了 EF?顺便说一句,我认为存储库/UoW 的目的是抽象出数据访问细节,因此分析验证错误的代码应该在 UoW 内部,并且 UoW 应该抛出自定义异常。 -
非常感谢@GertArnold 捕捉到这个。我将代码放在 unitOfWork 中,这样就消除了错误消息。我的问题解决了。谢谢!
标签: c# entity-framework asp.net-mvc-5