0

如果我在地图文件中定义了下一个(单元和机器之间的一对多关系):

this.HasRequired(t => t.Unit)
    .WithMany(t => t.Machines)
    .HasForeignKey(d => d.UnitId);

当我添加新实体 Machine.UnitOfMeasurement = null, sp 时,为什么 DbContext 在调用 GetValidationErrors 时没有返回验证问题,我该怎么做才能检测到它们。如果我允许 EF 尝试更新,它将向用户返回无意义的消息,例如外键引用错误,而我可以从 DbEntityValidationResult(发出验证错误的前属性名称)中提取有意义的信息给用户。

我将 IDataErrorInfo 用于验证规则,而不是属性。

4

1 回答 1

1

EF 验证不验证导航属性。这样做的原因是导航属性可能为 null 不是因为相关实体不存在,而是因为启用了延迟加载并且相关实体没有加载。此外,即使导航属性为空,您也可能设置了相应的外键属性,这基本上意味着关系存在但导航属性尚未更新。另请注意,强制加载相关实体意味着验证会将您的整个数据库带入内存(加载相关实体后,它们将被验证这将导致加载新加载实体的相关实体等等) - 您不希望这种情况发生(EF 实际上在验证期间关闭了延迟加载以防止这种情况发生)。

于 2012-09-20T05:34:41.393 回答