在我们的应用程序中,我们使用 EF4.0 和 POCO 实体生成器从数据库生成实体。为了应用数据注释,我们创建接口并在我们创建的分部类上实现这些接口,以匹配使用 EF 生成的分部类。
/*Entity Generated Type*/
public partial class SomeEntity : EntityBase
{
public virtual string SomeProperty
{
get {...}
set {...}
}
}
/*Interface containing metadata*/
public interface ISomeEntityMetadata
{
[SomeCustomAttribute]
string SomeProperty { get; set; }
}
/*Partial matching class for interface*/
[MetadataType(typeof(ISomeEntityMetadata))]
public partial class SomeEntity : ISomeEntityMetadata
{
}
现在,使用反射,当我们尝试获取“SomeCustomAttribute”是否应用于“SomeEntity.SomeProperty”时,它会返回该属性未应用。
如果我们编辑生成的代码并直接应用属性,它就可以工作。
如果我们检查分部类是否合并形成单一类型,结果确实如此。
如果我们检查要应用于该类型的 MetadataType 属性(使用反射),它就是如此。
此外,当实体绑定到任何 WPF 的 UI 元素时,验证会正常工作,但使用反射,我们无法找到应用于属性的验证属性和/或自定义属性。
任何帮助或指示都可以拯救一个灵魂。
但接口/类标记为MetadataType
attribute 永远不会将这些属性添加到您的原始类中,因此您永远无法通过反射在类上找到它们。这不是目的MetadataType
属性。如果你想使用反射你必须首先找到MetadataType
属性,检查传递给该属性的类型并搜索该类型中的自定义属性。这就是验证的使用方式MetadataType
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)