使用 SqliteDialect.Provider 架构的表
Tables with schema using SqliteDialect.Provider
在我的测试项目中,我使用“:memory”连接字符串和 SqliteDialect.Provider 作为提供者注册了一个连接。当尝试执行任意 sql 的 运行 测试时(我有一个复杂的连接语句,所以我不能使用类型化查询)我得到一个错误,指出 table 不存在。在我的查询中,我打印了 "SELECT * FROM xxx.Table1",但是当查看从键入的查询生成的代码时,我可以看到它是 "SELECT * FROM xxx_Table1"。我需要为生产代码使用模式,那么在我的域模型上使用属性 [Schema("xxx")] 时,有没有办法强制 ORMLite for Sqlite 生成模式而不仅仅是名称前缀?
SQLite 没有架构,因此通过在 table 名称前添加架构名称来模拟它们。然而,这应该是 SQLite :memory:
数据库的透明实现细节,因为在创建或查询 table.
时将使用相同的 table 名称
如果您要创建自定义 SQL,您应该使用 table返回的名称:
var modelDef = typeof(Table1).GetModelMetadata();
var tableName = db.GetDialectProvider().GetTableName(modelDef);
var sql = $"SELECT * FROM {tableName}";
在我的测试项目中,我使用“:memory”连接字符串和 SqliteDialect.Provider 作为提供者注册了一个连接。当尝试执行任意 sql 的 运行 测试时(我有一个复杂的连接语句,所以我不能使用类型化查询)我得到一个错误,指出 table 不存在。在我的查询中,我打印了 "SELECT * FROM xxx.Table1",但是当查看从键入的查询生成的代码时,我可以看到它是 "SELECT * FROM xxx_Table1"。我需要为生产代码使用模式,那么在我的域模型上使用属性 [Schema("xxx")] 时,有没有办法强制 ORMLite for Sqlite 生成模式而不仅仅是名称前缀?
SQLite 没有架构,因此通过在 table 名称前添加架构名称来模拟它们。然而,这应该是 SQLite :memory:
数据库的透明实现细节,因为在创建或查询 table.
如果您要创建自定义 SQL,您应该使用 table返回的名称:
var modelDef = typeof(Table1).GetModelMetadata();
var tableName = db.GetDialectProvider().GetTableName(modelDef);
var sql = $"SELECT * FROM {tableName}";