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;}