如何在DynamicProxy类中使用自定义属性

时间:2011-04-28 09:40:25

标签: c# entity-framework generics reflection attributes

我尝试将自定义属性分配给来自动态代理的类

System.Data.Entity.DynamicProxies.Login_A2947F53...

示例类登录

public partial class Login
{
    [CustomAttribute]
    public virtual int Id
    {
        get;
        set;
    }
}

现在我尝试使用泛型和反射访问属性

public static void Process(TSource source)
{
    foreach (PropertyInfo p in target.GetType().GetProperties(flags))
    {
        object[] attr = p.GetCustomAttributes(true); // <- empty
    } 
}

但没有属性。这是由于DynmaicProxy还是我在这里做错了什么?

当我使用没有像这样的动态代理的具体类时,我得到属性。

public class TestObject
{
    [CustomAttribute]
    public virtual string Name { get; set; }
    [CustomAttribute]
    public virtual string Street { get; set; }
    public virtual int Age { get; set; }
    public virtual string Something { get; set; }
}

2 个答案:

答案 0 :(得分:1)

好的,仔细观察后这个很明显;

System.Data.Entity.DynamicProxies.Login_A2947F53...

是dynamicProxy类型,对任何属性一无所知。所以我必须使用类似的东西:

foreach (PropertyInfo p in typeof(Login).GetProperties(flags))

而不是dynamicProxy实例来获取类型。最后还有我的属性。

答案 1 :(得分:1)

使用 BaseType

public static void Process(TSource source)
{
    foreach (PropertyInfo p in target.GetType().BaseType.GetProperties(flags))
    {
        object[] attr = p.GetCustomAttributes(true);
    } 
}