簡體   English   中英

實體框架中的動態表名

[英]Dynamic table name in Entity Framework

我將實體框架與數據庫優先方法一起使用。 我想根據條件動態更改表名或視圖名。

在這里,我使用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();

}

我想通過根據條件將表名動態附加到數據庫上下文來修改上述實現。

string tableName = string.empty

if(source == "a") 
    tableName = "aTable";

if(source == "b")  
    tableName="bTable";

this.db.tableName.where().....

這可能嗎?

您可以使用 switch 條件來設置表類型並將其與上下文一起使用

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()

暫無
暫無

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

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