2011-10-12 153 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)」 –