2

动态代理的名称类似于ClassName_00394CF1F92740F13E3EDBE858B6D599DFAF87AA5A089245977F61A32C75AA22POCO 类的简单名称Classname

我知道可以使用 获取 EF 动态代理实例的 POCO 类型ObjectContext.GetObjectType(instance.GetType()),但是有没有比这更简单的方法来获取给定 EF 类的代理类型:

databaseContext.TableName.First().GetType();

因为这需要表中有一个类型的实例(通常是这种情况,但这闻起来“错误”)。

我将类类型传递给一个函数(如下所示),以便某些父/子拖放规则可以应用于 TreeNodes(对象实例由 TreeNodes 的 Tag 属性引用,因此具有任何 EF 对象的动态类型)。

if (!AllowChildDrop(e.Node, e.TargetNode, e.DropPosition, typeof(Answer)), typeof(Question)))

那么基本上有没有比这更简单的方法来获取动态类型?

if (!AllowChildDrop(e.Node, e.TargetNode, e.DropPosition, context.Answer.First().GetType(), context.Question.First().GetType()))
4

1 回答 1

2

目前没有办法避免创建一个实例来发现运行时Type

DbSet.Create()你不应该使用First()

  1. 避免潜在的数据库之旅
  2. First()实例可能不是代理(例如,您在调用链的前面添加了一个实体)

看到这里了解更多信息

[the] 实例未添加或附加到集合。如果底层上下文配置为创建代理并且实体类型满足创建代理的要求,则返回的实例将是一个代理。

于 2013-09-16T10:43:46.937 回答