实体框架中的动态表名

本文关键字:动态 框架 实体 | 更新日期: 2023-09-27 18:05:53

我使用实体框架与数据库优先的方法。我想根据条件动态地更改表名或视图名。

在这里,我使用V_OVT_VLD_340B_DNA_CLDV_OVT_B_tableV_OVT_c_table来获取记录。

根据源,我需要调用不同的表名并获取记录。除了表名之外,整个代码片段是相同的。

请参考以下代码

private dOVT_OutlierViewEntities db = new dOVT_OutlierViewEntities();
if(source == "a")
{
    var result = this.db.V_OVT_VLD_340B_DNA_CLD.Where(x => x.DNA_PGM_PRTN_ID == partitionId && x.CLIENT_ID == clientId).ToList().Select(y => new ValidationModel
                {
                    claim_validation_test_id = new List<byte?> { y.CLAIM_VLD_TEST_ID },
                    claim_id = y.CLAIM_ID,
                    Provider_ID = y.Provider_ID,
                }).Take(id).ToList();
}
if(source == "b")
{
    var result = this.db.v_OVT_B_table.Where(x => x.DNA_PGM_PRTN_ID == partitionId && x.CLIENT_ID == clientId).ToList().Select(y => new ValidationModel
                    {
                        claim_validation_test_id = new List<byte?> { y.CLAIM_VLD_TEST_ID },
                        claim_id = y.CLAIM_ID,
                        Provider_ID = y.Provider_ID,
                    }).Take(id).ToList();
}
if(source == "c")
{
    var result = this.db.v_OVT_C_table.Where(x => x.DNA_PGM_PRTN_ID == partitionId && x.CLIENT_ID == clientId).ToList().Select(y => new ValidationModel
                    {
                        claim_validation_test_id = new List<byte?> { y.CLAIM_VLD_TEST_ID },
                        claim_id = y.CLAIM_ID,
                        Provider_ID = y.Provider_ID,
                    }).Take(id).ToList();
}

我想修改上面的实现,根据条件动态地将表名附加到db上下文。

string tableName = string.empty
if(source == "a") 
    tableName = "aTable";
if(source == "b")  
    tableName="bTable";
this.db.tableName.where().....

这可能吗?

实体框架中的动态表名

您可以使用switch条件来设置表类型,并将其用于context

switch (tableName)
        {
            case "a":
                tableType = typeof(V_OVT_VLD_340B_DNA_CLD);
                break;
            case "b":
                tableType = typeof(v_OVT_B_table);
                break;
            default:
                tableType = typeof(v_OVT_C_table);
                break;
        }
var query = context.Set(tableType);
var result = query.Find(); //filter with this query condition

你可以这样做…

   string tableName = string.empty
    if(source == "a") 
        tableName =db.GetTable("aTable");
    if(source == "b")  
        tableName=db.GetTable("bTable");

    and then query like..
     tableName.where()