sql-server - 与 SQL Server 和 SQLite 一起使用的 REPO Db 类型
问题描述
我有一个支持两个数据库的应用程序。MSSQL 和 SQLite。我正在改进底层数据访问和模型并使用 RepoDb。我会为 SQLite 和 MSSQL 使用相同的模型。根据连接字符串,我创建了我的连接对象(即 SQLiteConnection 或 SqlConnection)。我的一个实体遇到问题。问题在于列类型。
public class PLANT
{
public string OP_ID {get;set;}
}
SQL Server 中的OP_ID
映射到唯一标识符,而 SQLite 中映射到 nvarchar。在我尝试这样做的地方,它适用于 SQLiteConnection。我面临的问题是当我使用 SqlConnection
var plant = connection.Query<PLANT>(e => e.PL_ID == "3FFA25B5-4DF5-4216-846C-2C9F58B7DD90").FirstOrDefault();
我收到错误
“'System.Guid' 和 'System.String' 类型之间没有定义强制运算符”</p>
我试过IPropertyHandler<Guid, string>
在OP_ID
;上使用 它适用于 SqlConnection,但适用于 SQLiteConnection。
有没有办法可以为两个连接使用相同的模型?
解决方案
如果 PK 属于同一类型,我强烈建议您在多个数据库之间共享模型,否则由于一个数据库不支持该目标类型(即UNIQUEIDENTIFIER
),您最终会遇到一些这样的强制问题。
无论如何,由于输入类型不同,因此 PropertyHandler 不是一种方法。您可以为 SQLite 和 SqlServer 使用单独的模型,否则,您可以显式设置,RepoDb.Converter.ConversionType = Automatic
以便自动处理强制。
我不推荐CoversionType
自动,因为它是数据提取之上的附加转换逻辑。但这会解决它。
推荐阅读
- c# - 使用 NLog GetLogger 切换回默认记录器
- arduino - 使用 NRF24le1 中断 arduino nano 的问题
- java - 如何编写 JpaRepository 方法来搜索具有存储在 Set 中的电话号码的用户
- javascript - 缩小 Webpack 块名称
- python - Flask_SQLAlchemy 不能像 SQLAlchemy 一样反映数据库
- r - 按总和汇总后如何重命名列?
- reactjs - 如何让这个组件加载编辑页面组件
- javascript - 在javascript变量上调用jquery方法不起作用
- github - 尝试安装 yaireo/Tagify 时出现致命错误
- sql - 使用 Map[Int, Int] 的列查询 SQL