如何从TEntity的类型中获取派生的DbContext

时间:2017-09-21 06:19:06

标签: c# entity-framework

我有两个继承自dbcontext

的类
public class AContext : DbContext
{ 
     DbSet<A> A { get; set; }
}

public class BContext : DbContext
{
     DbSet<B> B { get; set; }
     DbSet<C> C { get; set; }
}

我如何通过typeOf(A / B / C)或typeOf(DbSet'&lt;'A / B / C'&gt;')获得指定的上下文?

1 个答案:

答案 0 :(得分:0)

简短的回答:一般来说,你不能拥有ABContext 一个BCContext - 你想从类型中找到哪一个? B

如果您将自己局限于多种上下文类型永远不会处理相同类型的情况(或者至少,对于您将用作搜索输入的任何类型都是如此),您可以获得所有类型程序集,过滤掉那些继承DbContext且具有正确类型属性的程序集,并选择匹配的那个。

typeof(ABContext).GetTypeInfo().Assembly.Types
    .Select(t => t.GetTypeInfo())
    .Where(t => typeof(DbContext).IsAssignableFrom(t))
    .Where(t => t.Properties.Any(p => p.Type == yourDbSetType))
    .Single();

(在我的手机上输入,很可能有一些拼写错误或不正确的BCL功能调用。我会仔细查看我在电脑上的时间......)

但是你希望通过这个来完成什么?将所有数据库集合放在一个上下文中是不是更好,以避免这种需要?