使用SqliteDialect.Provider

时间:2017-06-05 08:14:59

标签: sqlite servicestack ormlite-servicestack

在我的测试项目中,我使用“:memory”连接字符串和SqliteDialect.Provider作为提供者注册连接。当试图运行执行任意sql的测试时(我有一个复杂的连接语句,所以我不能使用类型化的查询)我得到一个表不存在的错误。在我的查询中,我打印“SELECT * FROM xxx.Table1”,但是当查看从类型查询生成的代码时,我可以看到它是“SELECT * FROM xxx_Table1”。我需要为生产代码使用模式,所以在我的域模型上使用属性[Schema(“xxx”)]时,是否有办法强制ORMLite for Sqlite生成模式而不仅仅是名称前缀?

1 个答案:

答案 0 :(得分:1)

SQLite没有模式,因此可以通过在表名前添加模式名称来模拟它们。但是,这应该是SQLite :memory: DB的透明实现细节,因为在创建或查询表时将使用相同的表名。

如果您正在创建自定义SQL,则应使用从以下位置返回的tableName:

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