簡體   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