2016-08-16 9 views
2

オブジェクトのすべてのプロパティを反復処理するメソッドがあります。さて、これは正常に動作しているが、私のテーブルログの上に、それはまた、以下に、このプロパティ書いているEntity Frameworkは一部の値を含むプロパティを取得します

Object obj = entry.Entity; 
Type type = obj.GetType(); 
PropertyInfo[] properties = type.GetProperties(); 

foreach (PropertyInfo property in properties) 
{ 
    oldData.AppendFormat("{0}={1} || ", property.Name, property.GetValue(obj, null)); 
} 

- PremiumReference=System.Data.Objects.DataClasses.EntityReference`1[Data.Premium] 
- EntityState=Deleted 
- EntityKey=System.Data.EntityKey 

任意のアイデアを、私は、このプロパティをフィルタリングすることができますどのように私はこれらのプロパティをログに記録するのですか?

+0

どのEFのバージョンを使用していますか?旧バージョン(EF 4)では、すべてのモデルクラスがEntityStateとEntityKeyプロパティを持つEntityObjectクラスから派生しました。 –

答えて

1

私は以下のコードで自分の問題を解決:

PropertyInfo[] properties = obj.GetType().GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance) 
      .Where(pi => !(pi.PropertyType.IsSubclassOf(typeof(EntityObject))) && !(pi.PropertyType.IsSubclassOf(typeof(EntityReference)))) 
      .ToArray(); 

BindingFlagsは助けをしましたが、私はまたEntityReferenceEntityObjectので、私はwhere句を追加する必要がしたくありません。

How to get all names of properties in an Entity?

2

Entity Frameworkのすべてのエンティティには、列挙型EntityStateのプロパティがあります。 EFはそれらをオブジェクトに追加します。

オブジェクトをEFに追加すると、EntityState.Addedとしてマークされます。

希望します。

は、多分それはあなたのニーズに合わせて、シナリオに必要な他のフラグと組み合わせてフラグDeclaredOnlyを使用して役立ちます

BindingFlags-Enumeration

+0

ありがとう@Lukasしかし、これは質問に答えることはできません。私は、Efのすべてのオブジェクトが 'EntityState'を持っていることをよく知っています、私はただそれらを私のログに入れたくありません。これは質問に答えません。 –

+0

申し訳ありません、私はあなたに誤解しました。申し訳ありません:) –

+0

心配しないで、それは起こります:) –

関連する問題