【问题标题】:Modify table dynamically in dbSet在 dbSet 中动态修改表
【发布时间】:2020-08-02 17:34:48
【问题描述】:

我正在使用 EF Core 3.0,并且需要动态更改表名,我正在考虑为其创建扩展方法。

具体要求: 我有两张表“Sample”和“Sample_History”,我想实现这样的目标:

从“样本”表中获取记录:DbContext.Samples.ToList(); 从“Sample_History”表中获取记录:DbContext.Samples.AsHistory().ToList();

在这里,我想使用扩展方法“AsHistory”将表的名称从“Sample”动态更改为“Sample_History”。显而易见的方法是获取 SQL 并更改我想要避免的。有什么方法可以改变 dbSet 本身的实体吗?

【问题讨论】:

    标签: entity-framework-core ef-core-3.0


    【解决方案1】:

    如果我理解你的要求是正确的,那么你可以试试这个:

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

    为了让你的扩展方法通用:

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

    【讨论】:

    • 谢谢,但我希望扩展方法是通用的。知道该怎么做吗?
    猜你喜欢
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    • 2017-02-19
    • 2022-09-30
    • 2019-03-09
    • 1970-01-01
    相关资源
    最近更新 更多