简体   繁体   English

获取实体的属性列表

[英]Get list of properties of an entity

I'm using entity framework. 我正在使用实体框架。

I would like to get the property list of an entity when the EntityState of the object is "Added", and loop throught them. 当对象的EntityState被“添加”时,我想获取实体的属性列表,并循环遍历它们。

here is a sample code of what I'm doing. 这是我在做什么的示例代码。

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];
    }
}

As you can see, I use 如您所见,我使用

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

to get the property list, but It's working only when the State is EntityState.Modified. 获取属性列表,但仅在State为EntityState.Modified时才有效。

Thanks. 谢谢。

Here is the way to perform my needs 这是满足我的需求的方法

With that, I can get all the attribute for an entity and get his value too. 这样,我可以获取实体的所有属性并获取其值。

 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];
        }
    }
}

Each entry you are enumerating over should have a 'State' property which is the EntityState, so you can either filter them out with an if clause or use linq, 您要枚举的每个条目都应具有“ State”属性(即EntityState),因此您可以使用if子句将其过滤掉,也可以使用linq,

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

Or 要么

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

Also I'm not sure if you need to look at 'Modified Properties' at all. 另外,我不确定您是否需要查看“修改后的属性”。 If it is an entity which has only just been added then why would it have any modified properties and not simply new ones (ie CurrentValues)? 如果它只是一个刚刚添加的实体,那么为什么它具有任何修改后的属性,而不仅仅是新的属性(即CurrentValues)?

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

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