簡體   English   中英

在ServiceStack.OrmLite中獲取運行時的類的表名/避免硬編碼表名

[英]Get table name of class at runtime in ServiceStack.OrmLite / avoid hardcoding table names

我使用ServiceStack.OrmLite並希望從表中獲取行的總數。 我目前正在ServiceStack.OrmLite文檔中指出

db.Scalar<int>("SELECT COUNT(*) FROM User");

但是,該表的名稱User可能在將來發生變化,因此我正在尋找一種不對其進行硬編碼的方法。 是否有可能從其類中獲取表的名稱,例如ie

string table_name = db.GetTableName<User> ();
db.Scalar<int>("SELECT COUNT(*) FROM {0}", table_name);

訪問類型的配置元數據的兩種方法是:

ModelDefinition<User>.Definition.ModelName;
typeof(User).GetModelMetadata().ModelName;

雖然在某些數據庫中您需要引用表名,但您可以使用以下命令:

var modelDef = ModelDefinition<User>.Definition;
OrmLiteConfig.DialectProvider.GetQuotedTableName(modelDef)

所以,是的,你可以用擴展方法包裝它,做你想要的:

public static MyOrmLiteExtensions {
    public static string GetTableName<T>(this IDbConnection db) {
        var modelDef = ModelDefinition<T>.Definition;
        return OrmLiteConfig.DialectProvider.GetQuotedTableName(modelDef);
    }
}

暫無
暫無

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

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