2017-06-05 7 views
1

私のテストプロジェクトでは、プロバイダとして ":memory"接続文字列とSqliteDialect.Providerを使用して接続を登録します。任意のsqlを実行するテストを実行しようとすると(複雑な結合文があるため、型付きクエリを使用できません)、表が存在しないというエラーが発生します。私のクエリでは、 "SELECT * FROM xxx.Table1"を表示しますが、入力されたクエリから生成されたコードを見ると、 "SELECT * FROM xxx_Table1"であることがわかります。私は生産コードのスキーマを使用する必要がありますので、ドメインモデルで[Schema( "xxx")]属性を使用するときに、名前プレフィックスだけでなく、スキーマを生成するためにSqliteにORMLiteを強制する方法がありますか?SqliteDialect.Providerを使用するスキーマを持つテーブル

答えて

1

SQLiteにはスキーマがないため、テーブル名の前にスキーマ名の接頭辞を付けてシミュレートします。ただし、SQLite :memory: DBの透過的な実装の詳細は、テーブルを作成または照会するときに同じテーブル名が使用されるため、これが必要です。

カスタムSQLを作成している場合は、tableNameのから返さ使用する必要があります。

var modelDef = typeof(Table1).GetModelMetadata(); 
var tableName = db.GetDialectProvider().GetTableName(modelDef); 
var sql = $"SELECT * FROM {tableName}"; 
関連する問題