C# 如何从ObjectContext提取类型列表?

C# 如何从ObjectContext提取类型列表?,c#,.net,entity-framework,C#,.net,Entity Framework,我使用实体框架。我创建实体模型。我希望在运行时从DbContext获取所有类型的实例 public class MyClass { WdmEntities _context = = new WdmEntities(); ObjectContext objContext = ((IObjectContextAdapter)_context).ObjectContext; EntityContainer container = objContext.MetadataWorkspa

我使用实体框架。我创建实体模型。我希望在运行时从DbContext获取所有类型的实例

public class MyClass
{
   WdmEntities _context =  = new WdmEntities();
   ObjectContext objContext = ((IObjectContextAdapter)_context).ObjectContext;
   EntityContainer container = objContext.MetadataWorkspace.GetEntityContainer(objContext.DefaultContainerName, DataSpace.CSpace);
   //even if c=>c.FullName
   List<string> nameTypes = container.BaseEntitySets.OfType<EntitySet>().Select(c=>c.Name).ToList();
   List<Type> types = new List<Type>();

   foreach(var name in nameTypes)
   {
    //.GetType return null
    types.Add(Type.GetType(name));
   }
}
公共类MyClass
{
WdmEntities_context==新的WdmEntities();
ObjectContext objContext=((IOObjectContextAdapter)_context).ObjectContext;
EntityContainer container=objContext.MetadataWorkspace.GetEntityContainer(objContext.DefaultContainerName,DataSpace.CSpace);
//即使c=>c.FullName
List nameTypes=container.BaseEntitySets.OfType().Select(c=>c.Name.ToList();
列表类型=新列表();
foreach(nameTypes中的变量名)
{
//.GetType返回空值
Add(Type.GetType(name));
}
}
尝试以下操作:

MyContext _context = new MyContext();
ObjectContext objContext = ((IObjectContextAdapter)_context).ObjectContext;
var nameTypes = objContext.MetadataWorkspace.GetItems<EntityType>(DataSpace.OSpace);
List<Type> types = new List<Type>();

foreach (var entityType in nameTypes)
{
    var type = Type.GetType(entityType.FullName + "," + Assembly.GetExecutingAssembly().FullName);
    types.Add(type);
}
MyContext\u context=newmycontext();
ObjectContext objContext=((IOObjectContextAdapter)_context).ObjectContext;
var nameTypes=objContext.MetadataWorkspace.GetItems(DataSpace.OSpace);
列表类型=新列表();
foreach(nameTypes中的var entityType)
{
var type=type.GetType(entityType.FullName+,“+Assembly.GetExecutionGassembly().FullName);
类型。添加(类型);
}
通过使用
GetItems
方法,可以直接从
ObjectContext加载所有实体。
传递给此方法的参数指定要在何处查找实体。您应该使用
OSpace
值从对象模型请求实体类型。这将映射到CLR类型,除非这些类型是嵌套的。在这种情况下,您将获得一个包含所有外部类型的组合名称

Type.GetType
需要对象的全名和程序集的全名。在本例中,我使用
Assembly.getExecutionGassembly
。如果您的实体是在另一个程序集中定义的,则需要对此进行更改。

MyContext\u context=new MyContext();
MyContext _context = new MyContext();
ObjectContext objContext = ((IObjectContextAdapter)_context).ObjectContext;
var nameTypes = objContext.MetadataWorkspace.GetItems<EntityType>(DataSpace.OSpace).Select(c => c.FullName).ToList();
List<Type> types = new List<Type>();

foreach (var name in nameTypes)
{
    var type = Type.GetType(name);
    types.Add(type);
}
ObjectContext objContext=((IOObjectContextAdapter)_context).ObjectContext; var nameTypes=objContext.MetadataWorkspace.GetItems(DataSpace.OSpace).Select(c=>c.FullName.ToList(); 列表类型=新列表(); foreach(nameTypes中的变量名) { var type=type.GetType(名称); 类型。添加(类型); }
ElementType有一个全名,但不等于Assembly中类型的全名。这是个问题。示例ElementType=“WdmModel.display\u type”,但实际上我在EditorX.EntityModel命名空间中有一个类display\u type