在我们的应用程序中,我们使用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
{
}
Run Code Online (Sandbox Code Playgroud)
现在,使用反射,当我们尝试获取'SomeCntomAttribute'是否应用于'SomeEntity.SomeProperty'时,它返回该属性未应用.
如果我们编辑生成的代码并直接应用属性,它就可以工作.
如果我们检查合并形成单一类型的部分类,它确实如此.
如果我们检查要在类型上应用的MetadataType属性(使用反射),它就是.
此外,当实体绑定到任何WPF的UI元素时,验证工作正常,但使用反射我们无法找到应用于属性的验证属性和/或自定义属性.
任何帮助或指针都会拯救灵魂.