簡體   English   中英

如何在 EF Core 中使用基本 DbContext class 訪問實體?

[英]How to get to entities using base DbContext class in EF Core?

我的項目包含兩個不同的數據庫,我需要在開始時搭建腳手架(數據庫優先方法)。 我想遵循存儲庫模式,但我的存儲庫需要使用不同的DbContext 我想創建一個具有“多態” DbContext屬性的BaseRepository class,如下所示:

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

        protected DbContext DbContext { get; private set; }

        public async Task<int> SaveChangesAsync() =>
            await DbContext.SaveChangesAsync();
    }

示例子 class:

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

        public async Task<GameEntity> GetGamesAsync() =>
            await DbContext... ???????
    }

問題是派生 class 中的數據庫上下文具有DbContext類型,因此我無法訪問我的實體。 有什么方法可以訪問存儲在派生的SomeDbContext class 中的實體,但使用基礎 class? 如果不是,那么解決此類問題的最佳方法是什么?

有什么方法可以訪問存儲在派生的SomeDbContext class 中的實體,但使用基礎 class?

是的。 您可以使用基本 class DbContextSet<T>通用方法,如下所示:

public async Task<GameEntity> GetGamesAsync() =>
    await DbContext.Set<GameEntity>().ToListAsync();

由於您知道DbContext的類型(它只能是給定類中的SomeDbContext ),您可以安全地轉換它:

public async Task<GameEntity> GetGamesAsync() =>
    await ((SomeDbContext)DbContext).Games...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM