繁体   English   中英

获取实体的属性列表

[英]Get list of properties of an entity

我正在使用实体框架。

当对象的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();

获取属性列表,但仅在State为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];
           }
      }
 }
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];
        }
    }
}

您要枚举的每个条目都应具有“ State”属性(即EntityState),因此您可以使用if子句将其过滤掉,也可以使用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)?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM