代码之家  ›  专栏  ›  技术社区  ›  iCollect.it Ltd

如何在没有类实例的情况下获取EF动态代理类的类型

  •  2
  • iCollect.it Ltd  · 技术社区  · 12 年前

    动态代理的名称如下 ClassName_00394CF1F92740F13E3EDBE858B6D599DFAF87AA5A089245977F61A32C75AA22 其中POCO类被简单地调用 Classname .

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

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

    由于这需要在表中有一个类型的实例(通常是这种情况,但这闻起来“不对”)。

    我将类类型传递给一个函数(如下所示),以便某些父/子拖动&丢弃规则可以应用于树节点(对象实例由树节点的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()))
    
    1 回复  |  直到 12 年前
        1
  •  2
  •   qujck Steven    12 年前

    目前无法避免创建一个实例来发现运行时 Type .

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

    1. 以避免对数据库的潜在访问
    2. 这个 第一个() 实例可能不是代理(例如,您在呼叫链的早期添加了一个实体)

    看见 here 了解更多信息

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