问题标签 [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.
c# - 验证后无法更改元数据
我正在尝试使用可以在运行时使用AssociatedMetadataTypeTypeDescriptionProvider
和更改的属性来实现验证TypeDescriptor.AddProvider
。
如果它只设置一次,它工作正常,但如果你想在验证后更改提供者使用Validator.ValidateObject
or Entity Framework
(它具有自动实体验证 on SaveChanges
)它会突然卡在你设置的提供者上,并且无法更改它。
让我们假设我们有这个有两个元数据的类:
创建人员和元数据实例:
让我们首先使用Create metadata 验证人员,然后使用Update:
输出:
您可能会注意到,它在两种情况下都使用创建元数据。让我们交换它们:
输出:
同样的结果。在这两种情况下都使用第一个提供程序。
正如我之前提到的,保存更改后实体框架也会发生这种情况。
我找到的唯一解决方案是使用自定义验证,但这不能与 EF 一起使用。
尽管可以在 EF 中禁用自动验证,但我认为这更像是 hack 而不是解决方案。
这是我的验证实现:
用法:
输出:
更新 1:Richard Deeming 发现验证器在内部缓存属性,这解释了所描述的行为。 验证属性存储