在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);
访问类型的配置元数据的两种方法是:
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);
}
}