Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架获取包含一些值的属性_C#_Entity Framework_Reflection - Fatal编程技术网

C# 实体框架获取包含一些值的属性

C# 实体框架获取包含一些值的属性,c#,entity-framework,reflection,C#,Entity Framework,Reflection,我有一个迭代对象所有属性的方法。我正在记录这些属性: Object obj = entry.Entity; Type type = obj.GetType(); PropertyInfo[] properties = type.GetProperties(); foreach (PropertyInfo property in properties) { oldData.AppendFormat("{0}={1} || ", property.Name, property.Get

我有一个迭代对象所有属性的方法。我正在记录这些属性:

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

知道如何过滤这些属性吗?

实体框架中的每个实体都有一个枚举EntityState属性。EF将它们添加到对象中

如果将对象添加到EF,它会将其标记为EntityState.Added

希望能有帮助

请参见此处查看


也许它有助于在场景中仅将标志declared与您需要的其他标志结合使用,以满足您的需要。

我用下面的代码解决了我的问题:

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确实有帮助,但我不想要EntityReference和EntityObject,所以我需要添加where子句


您使用的是哪个版本的EF?在旧版本EF4中,所有模型类都是从具有EntityState和EntityKey属性的EntityObject类派生的。谢谢@Lukas,但这并不能回答问题。我很清楚Ef中的每个对象都有一个EntityState,我只是不希望它们出现在我的日志中。这并不能回答问题。很抱歉我误解了你的问题。抱歉:不用担心,它发生在: