C# 如何从ObjectContext提取类型列表?
我使用实体框架。我创建实体模型。我希望在运行时从DbContext获取所有类型的实例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
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