首页 > 解决方案 > 与 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。

有没有办法可以为两个连接使用相同的模型?

标签: sql-serversqlite

解决方案


如果 PK 属于同一类型,我强烈建议您在多个数据库之间共享模型,否则由于一个数据库不支持该目标类型(即UNIQUEIDENTIFIER),您最终会遇到一些这样的强制问题。

无论如何,由于输入类型不同,因此 PropertyHandler 不是一种方法。您可以为 SQLite 和 SqlServer 使用单独的模型,否则,您可以显式设置,RepoDb.Converter.ConversionType = Automatic以便自动处理强制。

我不推荐CoversionType自动,因为它是数据提取之上的附加转换逻辑。但这会解决它。


推荐阅读