EF Code First:获取DbContext的所有POCO类型

时间:2012-09-23 15:34:54

标签: entity-framework ef-code-first poco dbcontext

有没有办法从指定的DbContext实例中获取POCO的类型?

3 个答案:

答案 0 :(得分:6)

您需要访问MetadataWorkspace

public class MyContext : DbContext
{

    public void Test()
    {            
        var objectContext = ((IObjectContextAdapter)this).ObjectContext;

        var mdw = objectContext.MetadataWorkspace;

        var items = mdw.GetItems<EntityType>(DataSpace.CSpace);
        foreach (var i in items)
        {
            Console.WriteLine("Class Name: {0}", i.Name);
        }
 }

答案 1 :(得分:4)

@Lei Yang:你可以用它来将所有类型都列入一个列表。

var objectContext = ((IObjectContextAdapter) dbContext).ObjectContext;
var mdw = objectContext.MetadataWorkspace;
var items = mdw.GetItems<EntityType>(DataSpace.CSpace);

var dbContextAssembly = dbContext.GetType().Assembly;

var entityTypes = new List<Type>();
foreach (var i in items) {
    entityTypes.Add(dbContextAssembly.GetType(i.FullName));
}

答案 2 :(得分:3)

不幸的是,我无法编辑接受的答案 - 您只需要更改使用的数据空间,如下所示

var items = mdw.GetItems<EntityType>(DataSpace.OSpace);

获取您的POCO课程而不是EF代理。