如何在运行时首先使用EF代码从ObjectContext获取实体类型列表?

Cha*_*ion 6 c# entity-framework

我正在尝试在EF之上编写一些扩展,我需要能够首先检查代码ObjectContext并检索其中的实体类型.我觉得这应该在元数据工作区的某个地方可用,但我不知道在哪里看.我正在使用EF 5.

请注意,我们不使用任何类型的代码生成来创建上下文,也不会在DbContext基类上放置特定于类型的DbSet访问器.因此,我不能简单地反映DbContext/ObjectContext来查看这样的属性.

Paw*_*wel 7

我认为这应该有效:

var objectItemCollection = 
   (ObjectItemCollection )((IObjectContextAdapter)ctx)
   .ObjectContext.MetadataWorkspace.GetItemCollection(DataSpace.OSpace);

foreach(var entityType in objectItemCollection.GetItems<EntityType>())
{
    Console.WriteLine(objectItemCollection.GetClrType(entityType).FullName);
}
Run Code Online (Sandbox Code Playgroud)