在ServiceStack.OrmLite中运行时获取类的表名/避免对表名进行硬编码

本文关键字:编码 ServiceStack 运行时 获取 OrmLite | 更新日期: 2023-09-27 17:58:37

我使用ServiceStack.OrmLite,希望从表中获取行总数。我目前通过在ServiceStack.OrmLite文档中指出

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

然而,表的名称User将来可能会更改,所以我正在寻找一种不硬编码的方法。是否可以从相应的类中获取表的名称,例如

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

在ServiceStack.OrmLite中运行时获取类的表名/避免对表名进行硬编码

访问类型的配置元数据的两种方法是:

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);
    }
}