我使用ServiceStack.OrmLite并希望从表中获取行的总数。我目前在ServiceStack.OrmLite documentation通过
指出db.Scalar<int>("SELECT COUNT(*) FROM User");
但是,该表的名称User
可能会在将来发生变化,因此我正在寻找一种不对其进行硬编码的方法。是否可以从其等级中获取表格的名称,例如即。
string table_name = db.GetTableName<User> ();
db.Scalar<int>("SELECT COUNT(*) FROM {0}", table_name);
答案 0 :(得分:8)
访问类型的配置元数据的两种方法是:
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);
}
}