如何为给定的DbContext获取所有可持久代码的第一个实体?
我可以通过反射从上下文中获取所有声明的DbSet属性,但是当继承进入时,{base}为基本抽象实体定义,我真正需要的是映射的具体后代列表。
(是的,我知道有一种通过DbSet<TSomeAbstractBaseEntity>
方法调用将实体连接到上下文的动态方式。我只是忽略了这种情况。)
答案 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()
});