3

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

?

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 に答える