2011-10-12 14 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

私はSQLにLINQを使用しています –

+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); 

バディクラスは自動的にコアコンポーネントと合併することはできません。

@CyanLiteは、コメントに記載されているように、メタクラス属性described here(シアンが追加されたリンク)のメタクラスを使用できます。これは内部フレームワークメタデータにのみ使用されます(MVCまたはダイナミックデータと仮定します)。

+0

動的なデータですが、Webフォームを使用しています。 –

+0

OK。残念ながら結果は変わりません。 –

+0

これを使用しようとしましたが、 "指定されたアセンブリ名またはコードベースが無効です(HRESULTの例外:0x80131047)" –

関連する問題