C# 如何使用EF Core中的基本DbContext类访问实体?

C# 如何使用EF Core中的基本DbContext类访问实体?,c#,.net-core,entity-framework-core,C#,.net Core,Entity Framework Core,我的项目包含两个不同的数据库,我需要在一开始构建它们(数据库优先方法)。我希望遵循存储库模式,但我的存储库需要使用不同的DbContext。我想创建一个BaseRepository类,该类具有“多态性”DbContext属性,如所附代码段中所示: internal abstract class BaseRepository { public BaseRepository(DbContext dbContext) { DbCo

我的项目包含两个不同的数据库,我需要在一开始构建它们(数据库优先方法)。我希望遵循存储库模式,但我的存储库需要使用不同的
DbContext
。我想创建一个
BaseRepository
类,该类具有“多态性”
DbContext
属性,如所附代码段中所示:

    internal abstract class BaseRepository
    {
        public BaseRepository(DbContext dbContext)
        {
            DbContext = dbContext;
        }

        protected DbContext DbContext { get; private set; }

        public async Task<int> SaveChangesAsync() =>
            await DbContext.SaveChangesAsync();
    }
内部抽象类基本存储库
{
公共基本存储库(DbContext DbContext)
{
DbContext=DbContext;
}
受保护的DbContext DbContext{get;private set;}
公共异步任务saveChangesSync()=>
等待DbContext.saveChangesSync();
}
示范儿童班:

internal class GameRepository : BaseRepository, IGameRepository
    {
        public GameRepository(SomeDbContext dbContext)
        {
            _dbContext = dbContext;
        }

        public async Task<GameEntity> GetGamesAsync() =>
            await DbContext... ???????
    }
内部类GameRepository:BaseRepository,IGameRepository
{
公共游戏存储库(SomeDbContext)
{
_dbContext=dbContext;
}
公共异步任务GetGamesAsync()=>
等待DbContext???????
}

问题是派生类中的数据库上下文具有类型
DbContext
,因此我无法访问我的实体。是否有任何方法可以访问派生
SomeDbContext
类中存储的实体,但使用基类?如果没有,那么解决此类问题的最佳解决方案是什么?

因为您知道
DbContext
的类型(它只能是给定类中的
SomeDbContext
),您可以安全地强制转换它:

公共异步任务GetGamesAsync()=>
等待((SomeDbContext)DbContext)。游戏。。。
是否有任何方法可以访问存储在派生的
SomeDbContext
类中但使用基类的实体

对。您可以使用基类
DbContext
Set
泛型方法,如下所示:

public async Task<GameEntity> GetGamesAsync() =>
    await DbContext.Set<GameEntity>().ToListAsync();
公共异步任务GetGamesAsync()=>
等待DbContext.Set().ToListSync();

尝试在驱动类中隐藏DbContext属性
受保护的新SomeDbContext DbContext{get;private set;}