【问题标题】:Get Custom Attributes applied to generated entities via MetadataType attribute通过 MetadataType 属性获取应用于生成实体的自定义属性
【发布时间】:2012-06-20 07:40:53
【问题描述】:

在我们的应用程序中,我们使用 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
{
}

现在,使用反射,当我们尝试获取是否在“SomeEntity.SomeProperty”上应用了“SomeCustomAttribute”时,它会返回未应用该属性。

如果我们编辑生成的代码并直接应用属性,它就可以工作。
如果我们检查部分类合并形成单一类型,它确实如此。
如果我们检查要应用于类型的 MetadataType 属性(使用反射),那就是。
此外,当实体绑定到任何 WPF 的 UI 元素时,验证会正常工作,但使用反射我们无法找到应用于属性的验证属性和/或自定义属性。

任何帮助或指示都会拯救一个灵魂。

【问题讨论】:

标签: reflection entity-framework-4 metadatatype


【解决方案1】:

但是标有MetadataType 属性的接口/类永远不会将这些属性添加到您的原始类中,因此您永远无法在具有反射的类上找到它们。这不是MetadataType 属性的目的。如果您想使用反射,您必须首先找到MetadataType 属性,检查传递给该属性的类型并在该类型中搜索您的自定义属性。这就是验证使用MetadataType 的方式。

【讨论】:

    猜你喜欢
    • 2010-10-29
    • 2016-07-07
    • 1970-01-01
    • 2011-08-29
    • 2014-10-30
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多