如何为给定的DbContext获取所有可持久代码的第一个实体?

时间:2015-07-02 08:36:04

标签: .net entity-framework

如何为给定的DbContext获取所有可持久代码的第一个实体?

我可以通过反射从上下文中获取所有声明的DbSet属性,但是当继承进入时,{base}为基本抽象实体定义,我真正需要的是映射的具体后代列表。

(是的,我知道有一种通过DbSet<TSomeAbstractBaseEntity>方法调用将实体连接到上下文的动态方式。我只是忽略了这种情况。)

1 个答案:

答案 0 :(得分:0)

我不知道这个解决方案有多强大,但它给了我所需要的东西。

var metadata = ((IObjectContextAdapter)context).ObjectContext.MetadataWorkspace;
var mappedTypes = metadata.GetItemCollection(DataSpace.CSSpace)
    .GetItems<EntityContainerMapping>()
    .Single()
    .EntitySetMappings
    .Select(
        m =>
            new
            {
                SetType = m.EntitySet.ElementType,
                Types =
                    m.EntityTypeMappings
                        .Where(tm => tm.EntityType != null && !tm.EntityType.Abstract)                          .Select(tm => tm.EntityType)
                        .ToList()
            });