3

我使用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);

?

4

1 回答 1

9

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

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);
    }
}
于 2013-02-09T15:21:02.880 回答