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