动态代理的名称类似于ClassName_00394CF1F92740F13E3EDBE858B6D599DFAF87AA5A089245977F61A32C75AA22
,其中POCO类简称为Classname
。
我知道可以使用ObjectContext.GetObjectType(instance.GetType())
获取EF动态代理实例的POCO类型,但有一种更简单的方法来获取给定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()))
答案 0 :(得分:1)
目前无法避免创建实例来发现运行时Type
。
您应该使用DbSet.Create()
而不是First()
First()
实例可能不是代理(例如,您在调用链中添加了一个实体)有关详细信息,请参阅here
[]]实例未添加或附加到集合中。如果基础上下文配置为创建代理并且实体类型满足创建代理的要求,则返回的实例将是代理。