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

Dyn*_*lon 3 .net c# orm servicestack ormlite-servicestack

我使用ServiceStack.OrmLite并希望从表中获取行的总数.我现在做的在指出ServiceStack.OrmLite文件通过

db.Scalar<int>("SELECT COUNT(*) FROM User");
Run Code Online (Sandbox Code Playgroud)

但是,表的名称User可能会在将来发生变化,因此我正在寻找一种不对其进行硬编码的方法.是否有可能从其类中获取表的名称,例如ie

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

myt*_*thz 8

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

ModelDefinition<User>.Definition.ModelName;
typeof(User).GetModelMetadata().ModelName;
Run Code Online (Sandbox Code Playgroud)

虽然在某些数据库中您需要引用表名,但您可以使用以下命令:

var modelDef = ModelDefinition<User>.Definition;
OrmLiteConfig.DialectProvider.GetQuotedTableName(modelDef)
Run Code Online (Sandbox Code Playgroud)

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

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