【问题标题】:SQLite as in-memory database for SQL ServerSQLite 作为 SQL Server 的内存数据库
【发布时间】:2016-11-01 21:20:30
【问题描述】:

我的设置类似于使用内存中的 SQLite (http://mikhail.io/2016/02/unit-testing-dapper-repositories/) 测试对 SQL Server 的 dapper 调用,使用以下库:https://github.com/ServiceStack/ServiceStack.OrmLite

我正在为我的 DAL 使用带有 ad hoc SQL 的 dapper,并且想在不依赖 SQL Server 的情况下测试数据访问层。我使用 SQLite 内存数据库。问题是 SQL Server 和 SQLite 之间的 SQL 语法不同。

例如,我有一个使用偏移量返回分页结果并获取下一个的查询,但 SQLite 仅支持限制和偏移量。

如果您对我进行内存单元测试有什么建议怎么办?我没有使用模拟的 db 上下文进行 EF 路由,因为 dapper 性能更高,并且不想使用存储过程,因为我也想测试我的 SQL。我不想模拟我的数据库调用。

【问题讨论】:

    标签: c# sql-server sqlite unit-testing dapper


    【解决方案1】:

    Ormlite 的 Typed API 与 RDBMS 无关,因此只要您坚持使用 OrmLite 的 Typed API,您就可以通过更改连接字符串和方言提供者轻松地在不同数据库之间切换,例如:

    //SQL Server
    var dbFactory = new OrmLiteConnectionFactory(connectionString,  
        SqlServerDialect.Provider);
    
    //InMemory Sqlite DB
    var dbFactory = new OrmLiteConnectionFactory(":memory:", 
        SqliteDialect.Provider); 
    

    然后您可以使用任一数据库来创建、持久化和查询 POCO,例如:

    using (var db = dbFactory.Open())
    {
        db.DropAndCreateTable<Poco>();
        db.Insert(new Poco { Name = name });
        var results = db.Select<Poco>(x => x.Name == name);
        results.PrintDump();
    }
    

    但如果使用Custom SQL API's to execute MSSQL-specific SQL,您将无法针对 SQLite 执行该操作。您可以使用mockable support in OrmLite,但我个人建议改用 OrmLite 的 RDBMS 不可知类型 API。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-30
      • 1970-01-01
      • 2016-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多