【问题标题】:REPO Db type which works with SQL Server as well as SQLite与 SQL Server 和 SQLite 一起使用的 REPO Db 类型
【发布时间】:2020-06-03 00:29:38
【问题描述】:

我有一个支持两个数据库的应用程序。 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’类型之间没有定义强制运算符”

我尝试在OP_ID 上使用IPropertyHandler&lt;Guid, string&gt;;它适用于 SqlConnection,但适用于 SQLiteConnection。

有没有一种方法可以让两个连接使用相同的模型?

【问题讨论】:

    标签: sql-server sqlite


    【解决方案1】:

    如果 PK 属于同一类型,我强烈建议您在多个数据库之间共享模型,否则由于一个数据库不支持该目标类型(即 @ 987654321@).

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-03
      • 2012-03-26
      • 1970-01-01
      • 1970-01-01
      • 2019-11-15
      • 1970-01-01
      相关资源
      最近更新 更多