Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从TEntity类型获取派生的DbContext_C#_Entity Framework - Fatal编程技术网

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

C# 如何从TEntity类型获取派生的DbContext,c#,entity-framework,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; } } public类AContext:DbContext { DbSet A{get;set;

我从dbcontext继承了两个类

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

public class BContext : DbContext
{
     DbSet<B> B { get; set; }
     DbSet<C> C { get; set; }
}
public类AContext:DbContext
{ 
DbSet A{get;set;}
}
公共类BContext:DbContext
{
DbSet B{get;set;}
DbSet C{get;set;}
}

如何通过typeOf(A/B/C)或typeOf(DbSet“”)获取指定的上下文

简短回答:一般来说,你不能,因为很可能有
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功能的呼叫不正确。当我在电脑前时,我会再次检查…)


但你希望通过这一点实现什么呢?为了避免这种需要,将所有数据库集放在一个上下文中不是更好吗

EF数据实体只是POCO;实体和上下文之间没有真正的关联。在这一点上,您想实现什么?我有一个通用存储库,如Rpository,T是实体类,现在我想通过构造函数中的(T)类型获得指定的dbContext。谢谢您的回答,我有一个抽象和通用存储库,T是实体类,我想使用DI注入IAmbientDbContextLocator,我的存储库有属性DataContex并返回DbContext类型,现在我不知道如何在属性中的getter函数中编写代码_contextLoactor.Get(_dbContextType);//如何获取dbcontextType?如果您同意将db上下文类型公开给客户机代码,则可以创建repo type
存储库
,该存储库为您提供所需的所有信息。如果您不想让客户端代码知道要使用什么上下文类型,只需将所有数据库集放在一个上下文中即可。好的,我会尝试将dbcontext类型公开给服务层,谢谢您。