获取实体的属性列表
我正在使用实体框架。获取实体的属性列表
我想获得一个实体的属性列表,当对象的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();
获取属性列表,但它只在状态为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];
}
}
}
你列举了应该有一个“国家”财产是EntityState每个条目,这样你就可以将它们过滤掉了,如果条款或使用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)?
是的,这是我的问题。我不知道如何获得属性列表。 “已修改的属性”返回已修改的属性列表,在这种情况下,这不是获取我的属性列表的正确方法。如何获得此列表。 ? –
你想要完成什么?在我看来,你只需要使用.GetCurrentValues()方法。 msdn文档说GetModifiedProperties()返回自上次调用SaveChanges()以来已更改的对象属性的名称。如果它的上一次SaveChanges()不存在的新实体被调用,它将不会有任何修改的属性。 –
你想要哪个属性?实体类的所有(所有)属性的值列表? –
我只想要像属性int32,字符串,布尔等不是像ex(“EntityObject,EntityReference”)实体类。然后获得这些财产的价值。例如,如果我有一个实体联系人,我想获取联系人ID,联系人姓名等... –
为了更加清晰,我需要该方法仅返回实体类的属性(即表格的名称)。 –