如何使用反射获取断开连接的对象的已加载 EF4.0 属性列表

发布于 2024-10-18 21:05:30 字数 1023 浏览 2 评论 0原文

如何使用反射来获取断开连接的 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) 
     {
     }
  }
}

任何帮助将不胜感激。

How do I use reflection to get a list of loaded properties of a disconnected EF object?

I can use

var targetProperty.GetValue(targetObject, null);
var isLoaded = ((System.Data.Objects.DataClasses.RelatedEnd)(propertyValue)).IsLoaded;

but this only works for collection properties. For single object property, it doesn't work well. It will give message

The ObjectContext instance has been
disposed and can no longer be used for
operations that require a connection.

The code I use is similar to the following

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) 
     {
     }
  }
}

Any help would be greatly appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

燃情 2024-10-25 21:05:30
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)
  {
  }
}
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)
  {
  }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文