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,我只是不希望它们出现在我的日志中。这并不能回答问题。很抱歉我误解了你的问题。抱歉:不用担心,它发生在: