Динамическое изменение таблицы в dbSet - PullRequest
0 голосов
/ 02 августа 2020

Я использую EF Core 3.0 и имею требование динамически изменять имя таблицы, для которой я собираюсь создать метод расширения.

Точное требование: у меня есть две таблицы «Sample» и «Sample_History» и Я хочу получить что-то вроде этого:

Чтобы получить записи из таблицы Sample: DbContext.Samples.ToList(); Чтобы получить записи из таблицы Sample_History: DbContext.Samples.AsHistory().ToList();

Здесь я хочу динамически измените имя таблицы с «Sample» на «Sample_History», используя метод расширения «AsHistory». Очевидный способ - получить SQL и изменить его на aviod. Есть ли способ изменить объект в самом dbSet?

1 Ответ

0 голосов
/ 02 августа 2020

Если я правильно понимаю ваше требование, вы можете попробовать это:

public static class DbSetExtensions
{
    public static DbSet<SampleHistory> AsHistory(this DbSet<Sample> sample)
    {
        return sample.GetService<DatabaseContext>().SampleHistory;
    }
}

И сделать ваш метод расширения универсальным c:

public static class DbSetExtensions
{
    public static DbSet<T> ToDbSet<T>(DbSet<Sample> dbSet) where T : class
    {
        return dbSet.GetService<DatabaseContext>().Set<T>();
    }
}
...