2011-10-12 118 views
3

我有一个名为Project的LINQ生成的类。使用反射从元数据类获取属性属性

我想向生成的属性添加一些属性,所以我使用MetadataType属性定义了部分类。

[MetadataType(typeof(Project_HiddenProps))] 
public partial class Project : IProject 
{ 
    // There are also a few additional properties defined here. 
} 

public class Project_HiddenProps 
{ 
    [HiddenColumn] 
    public System.Guid Id { get; set; } 
    // Id is an auto-generated property that I've added a custom attribute to 
} 

后来,我使用反射尝试获取此属性的属性。

var customAttributes = prop.GetCustomAttributes(false); 

我只得到一个属性,不过,System.Data.Linq.Mapping.ColumnAttribute类型。我的HiddenColumn属性不包含在集合中。我的问题是如何使用反射来获取这些元数据属性。

任何帮助将不胜感激。

+0

你使用的是LINQ to SQL或LINQ to Entities之类的东西吗? –

+0

我正在使用LINQ到SQL –

+0

我在这里找到了你的问题(和我的)的答案:http://stackoverflow.com/questions/1910532/attribute-isdefined-doesnt-see-attributes-applied-with- metadatatype-class – Efekt

回答

6

可以反映出其他类,使用常规的方法:

var type = Type.GetType(entityType.FullName + "_HiddenProps," + entityType.AssemblyQualifiedName); 
type.GetProperty("Id").GetCustomAttributes(false); 

好友类不能自动与核心组件合并。这只用于内部框架元数据(假设这是MVC,或者可能是动态数据?)

由于@CyanLite在评论中提到,您可以使用元数据属性described here(添加链接青色)中的元类。

+0

它是动态数据,但带有Web表单。 –

+0

好的。不幸的是,结果仍然是一样的。 –

+0

试图使用这个,但得到“给定的程序集名称或代码库的异常是无效的(从HRESULT异常:0x80131047)” –