我正在使用 MVP、EntityFramework 和 Castle Windsor 的实现。
一切似乎都很好,但是当使用 dbContext.SaveChanges() 将新记录添加到表中(其中有许多将其映射到其他表的外键)时,EntityFramework 似乎继续并尝试在每个其他表中插入记录直接表中的外键。
例如:Employee表有一个外键,它将它链接到Department表。当 EF 被要求对Employee表执行 SaveChanges() 时;它继续在Department表中插入一条空记录,这不是必需的,这会触发此异常:
一个或多个实体的验证失败。有关更多详细信息,请参阅“EntityValidationErrors”属性。
我已经使用以下方法“捕获”了此异常的详细信息:
catch (DbEntityValidationException dbEx)
{
foreach (var validationErrors in dbEx.EntityValidationErrors)
{
foreach (var validationError in validationErrors.ValidationErrors)
{
Trace.TraceInformation("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage);
//For QuickWatch
//((System.Data.Entity.Validation.DbEntityValidationException)$exception).EntityValidationErrors.First().ValidationErrors.First().ErrorMessage
}
}
}
问题似乎发生在保存更改时;当温莎城堡已经为每个实体实例化了“对象”时。这些实例使 EF 认为它们可以保存到数据库中,这会导致验证错误,因为没有数据被发送到这些表中的任何一个。
我能做些什么来解决这个问题。为实体模型创建一个基类会有帮助吗?如果是,我该怎么做?
请告诉我。谢谢。
更新
@Steven Dependencies 没有被注入实体。实体被注入到 Presenters 中(在构造函数中)。发生的事情是,因为部门在员工中有一个“导航属性”,所以每次我插入一个新员工时,EntityFramework 都会插入一个空白部门(在部门表中),从而生成验证异常,因为没有为部门明明!