2017-06-05 13 views
1

在我的測試項目中,我使用「:memory」連接字符串和SqliteDialect.Provider作爲提供程序註冊一個連接。當試圖運行執行任意sql的測試時(我有一個複雜的連接語句,所以我不能使用類型化查詢),我得到一個表不存在的錯誤。在我的查詢中,我打印「SELECT * FROM xxx.Table1」,但在查看從類型化查詢生成的代碼時,我可以看到它是「SELECT * FROM xxx_Table1」。我需要爲生產代碼使用模式,那麼在我的域模型上使用屬性[Schema(「xxx」)]時,是否有辦法強制ORMLite for Sqlite生成模式,而不僅僅是命名前綴?使用SqliteDialect.Provider的模式表

回答

1

SQLite沒有模式,因此它們是通過在模式名稱前添加模式名稱來模擬的。但是,這應該是SQLite :memory: DB的透明實現細節,因爲在創建或查詢表時將使用相同的表名。

如果要創建自定義的SQL,你應該使用表名返回了:

var modelDef = typeof(Table1).GetModelMetadata(); 
var tableName = db.GetDialectProvider().GetTableName(modelDef); 
var sql = $"SELECT * FROM {tableName}";