[英]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.