如何使用反射来获取已断开连接的EF对象的已加载属性列表?
我可以用
var targetProperty.GetValue(targetObject, null);
var isLoaded = ((System.Data.Objects.DataClasses.RelatedEnd)(propertyValue)).IsLoaded;
但这仅适用于集合属性。对于单个对象属性,它不能很好地工作。它会给出消息
ObjectContext实例已经存在 处置,不能再使用了 需要连接的操作。
我使用的代码类似于以下
IEnumerable<object> q;
using(var context = new InfosContext())
{
q = context.Person.Include("Father").Take(10).ToList();
}
foreach(var value in q)
{
var sourceProperties = value.GetType().GetProperties().ToList();
var singleProperties = sourceProperties.Where(i => i.PropertyType.AssemblyQualifiedName.StartsWith("TestProject.Models.Entities")).ToList();
foreach(var i in singleProperties)
{
var propertyValue = i.GetValue(value, null); // BOOM. Exception here.
if (propertyValue != null && ((System.Data.Objects.DataClasses.RelatedEnd)(propertyValue)).IsLoaded)
{
}
}
}
非常感谢任何帮助。
答案 0 :(得分:1)
foreach(var i in singleProperties)
{
var reference = value.GetType().GetProperty(i.Name + "Reference");
var refValue = reference.GetValue(value, null);
var isLoaded = ((System.Data.Objects.DataClasses.EntityReference)(refValue)).IsLoaded;
if(isLoaded)
{
}
}