2017-06-05 73 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}";