获取实体的属性列表

问题描述:

我正在使用实体框架。获取实体的属性列表

我想获得一个实体的属性列表,当对象的EntityState是“添加”,并循环他们。

这里是我正在做的一个示例代码。

var newEntities = ObjectStateManager.GetObjectStateEntries(EntityState.Added); 
foreach (var entry in newEntities) 
{ 
    var entityName = entry.EntitySet.Name; 
    var newProps = ObjectStateManager.GetObjectStateEntry(entry.EntityKey).GetModifiedProperties(); 
    var currentNewValues = ObjectStateManager.GetObjectStateEntry(entry.EntityKey).CurrentValues; 

    foreach (var propName in newProps) 
    { 
     var newValue = currentNewValues[propName]; 
    } 
} 

正如你所看到的,我用

ObjectStateManager.GetObjectStateEntry(entry.EntityKey).GetModifiedProperties();

获取属性列表,但它只在状态为EntityState.Modified时才起作用。

谢谢。

这里是执行我的需要

用的方式,我可以得到一个实体的所有属性,并得到他的价值了。

var newEntities = ObjectStateManager.GetObjectStateEntries(EntityState.Added); 
foreach (var entry in newEntities) 
{ 
     if (entry.State == EntityState.Added) 
     { 
      var prop = entry.Entity.GetType().GetProperties(); 
      var entityName = entry.EntitySet.Name; 

      var currentNewValues = ObjectStateManager.GetObjectStateEntry(entry.EntityKey).CurrentValues; 
      foreach (var propName in prop.Where(p => p.PropertyType.Namespace == "System")) 
      { 
       var newValue = currentNewValues[propName.Name]; 
      } 
     } 
} 
+0

你想要哪个属性?实体类的所有(所有)属性的值列表? –

+0

我只想要像属性int32,字符串,布尔等不是像ex(“EntityObject,EntityReference”)实体类。然后获得这些财产的价值。例如,如果我有一个实体联系人,我想获取联系人ID,联系人姓名等... –

+0

为了更加清晰,我需要该方法仅返回实体类的属性(即表格的名称)。 –

foreach (var entry in newEntities) 
{ 
    if (entry.State == EntityState.Added) 
    { 
     // continue and get property list 
     var currentValues = entry.CurrentValues; 
     for (var i = 0; i < currentValues.FieldCount; i++) 
     { 
      var fName = currentValues.DataRecordInfo.FieldMetadata[i].FieldType.Name; 
      var fCurrVal = currentValues[i]; 
     } 
    } 
} 

你列举了应该有一个“国家”财产是EntityState每个条目,这样你就可以将它们过滤掉了,如果条款或使用LINQ,

 foreach (var entry in newEntities) 
     { 
      if (entry.State == EntityState.Added) 
      { 
        // continue and get property list 
      } 
     } 

或者

 var addedEntities = newEntities.Where(x => x.State == EntityState.Added); 

另外我不确定是否需要查看'修改属性'。如果它是一个刚添加的实体,为什么它会有任何修改的属性,而不是简单的新属性(即CurrentValues)?

+0

是的,这是我的问题。我不知道如何获得属性列表。 “已修改的属性”返回已修改的属性列表,在这种情况下,这不是获取我的属性列表的正确方法。如何获得此列表。 ? –

+0

你想要完成什么?在我看来,你只需要使用.GetCurrentValues()方法。 msdn文档说GetModifiedProperties()返回自上次调用SaveChanges()以来已更改的对象属性的名称。如果它的上一次SaveChanges()不存在的新实体被调用,它将不会有任何修改的属性。 –