问题标签 [propertydescriptor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
29 浏览

c# - 验证后无法更改元数据

我正在尝试使用可以在运行时使用AssociatedMetadataTypeTypeDescriptionProvider和更改的属性来实现验证TypeDescriptor.AddProvider

如果它只设置一次,它工作正常,但如果你想在验证更改提供者使用Validator.ValidateObjector Entity Framework (它具有自动实体验证 on SaveChanges它会突然卡在你设置的提供者上,并且无法更改它。

让我们假设我们有这个有两个元数据的类:

创建人员和元数据实例:

让我们首先使用Create metadata 验证人员,然后使用Update

输出:

您可能会注意到,它在两种情况下都使用创建元数据。让我们交换它们:

输出:

同样的结果。在这两种情况下都使用第一个提供程序。

正如我之前提到的,保存更改后实体框架也会发生这种情况。

我找到的唯一解决方案是使用自定义验证,但这不能与 EF 一起使用。
尽管可以在 EF 中禁用自动验证,但我认为这更像是 hack 而不是解决方案。

这是我的验证实现:

用法:

输出:

完整的源代码

更新 1:Richard Deeming 发现验证器在内部缓存属性,这解释了所描述的行为。 验证属性存储