Dapper是Stack Overflow团队开发和使用的.NET的微型ORM,主要以原始性能为主要目标。
其中t:class { 受保护
在这里使用dapper进行查询,从而获得错误消息=“ ora-00936:丢失表达式 “在我的查询中。我想知道我在这里错过了什么? 公共类
我在项目中使用dapper,我想将表名称作为查询中的动态参数。 这是我的代码:
i'm与npgsql和dapper我有一些复合数据类型的表: 创建类型dateTimeOffset作为 (( “ dateTimeUtc”时间戳没有时区, “
var test = new FallEnvironmentalCondition[] { new FallEnvironmentalCondition {Id=40,FallId=3,EnvironmentalConditionId=1}, new FallEnvironmentalCondition {Id=41,FallId=3,EnvironmentalConditionId=2}, new FallEnvironmentalCondition {Id=42,FallId=3,EnvironmentalConditionId=3} }; test.ToList().ForEach(async x => await conn.UpdateAsync(x));
如何使用moq.dapper<dynamic>模拟QueryAsync
我们有一个下面的类,可以在参数中提供的表中找到记录,然后在事务中删除它们。 公共异步任务 我们有一个下面的类,可以在参数中提供的表中找到记录,然后在事务中删除它们。 public async Task<IEnumerable<DataTableRecordsResponse>> DeleteDataAsync(string tenantId) { if (string.IsNullOrEmpty(tenantId)) { throw new ArgumentNullException(nameof(tenantId)); } var deletedRecords = new List<DataTableRecordsResponse>(); try { using (IDbConnection conn = _sqlDbConnection.CreateConnection()) { conn.Open(); using (IDbTransaction transaction = conn.BeginTransaction()) { try { foreach (string table in s_allowedTableName) { string selectQuery = $"SELECT * FROM {table} WHERE TenantId = @tenantId;"; IEnumerable<dynamic> records = await _dapperWrapper.QueryAsync<dynamic>(conn, selectQuery, new { tenantId }, transaction); deletedRecords.Add(new DataTableRecordsResponse(table, records)); if (records.Any()) { string deleteCommand = $"DELETE FROM {table} WHERE TenantId = @tenantId; "; await _dapperWrapper.ExecuteAsync(conn, deleteCommand, new { tenantId }, transaction); } } transaction.Commit(); } catch (Exception ex) { transaction.Rollback(); _logger.LogException(ex); throw; } finally { _logger.LogEvent("Tenant data purge operation completed"); } } } } catch (Exception ex) { _logger.LogException(ex); throw; } return deletedRecords; } } 我正在尝试使用以下代码模拟QueryAsync,但是,它返回null: [TestMethod] public async Task Successful_Transaction_Should_Complete_Transaction_And_Return_Deleted_Records() { //Arrange _sqlDbConnection.Setup(c => c.CreateConnection()).Returns(_dbMock.Object); _bulkOperationHelper = new BulkOperationHelper(_sqlDbConnection.Object, _loggerMock.Object); _dbMock.SetupDapperAsync(c => c.QueryAsync<dynamic>(It.IsAny<string>(), It.IsAny<object>(), null, null, null)) .ReturnsAsync(_results); _dbMock.SetupDapper(c => c.ExecuteScalar(It.IsAny<string>(), It.IsAny<object>(), null, null, null)) .Returns(0); //Act List<DataTableRecordsResponse> deletedRecords = await _bulkOperationHelper.TenantDecommissioningBatchDelete(_tenantId, _tables); //Assert Assert.IsNotNull(deletedRecords); Assert.IsTrue(deletedRecords.Count > 0); Assert.IsTrue(deletedRecords.Count == 0); } thiseythe thiseytory似乎有一个关于此事的dapper存储库中的开放式。 由于不可能嘲笑QueryAsync,可以在以下添加到涂层库的包装类别。 public class DapperWrapper : IDapperWrapper { public async Task<IEnumerable<T>> QueryAsync<T>(IDbConnection connection, string sql, object param = null, IDbTransaction transaction = null) { return await connection.QueryAsync<T>(sql, param, transaction); } public async Task<int> ExecuteAsync(IDbConnection connection, string sql, object param = null, IDbTransaction transaction = null) { return await connection.ExecuteAsync(sql, param, transaction); } } 在单元测试中,类和IT方法可以被模拟如下: [TestMethod] public async Task DeleteDataAsync_ShouldCommitTransaction_WhenAllTablesProcessed() { foreach (string table in AllowedTables) { SetupMockForTableWithRecords(_mockConnection, _mockTransaction, _tenantId, table); } IEnumerable<DataTableRecordsResponse> result = await _tenantDataPurgeHelper.DeleteDataAsync(_tenantId); AssertResultsAndCommit(result); _mockTransaction.Verify(x => x.Commit(), Times.Once); } private void SetupMockForTableWithRecords(Mock<IDbConnection> mockConnection, Mock<IDbTransaction> mockTransaction, string tenantId, string table) { _mockDapperWrapper .Setup(x => x.QueryAsync<dynamic>(mockConnection.Object, $"SELECT * FROM {table} WHERE TenantId = @tenantId;", It.Is<object>(p => p.Equals(new { tenantId })), mockTransaction.Object)) .ReturnsAsync(new List<dynamic> { new { Id = 1, TenantId = tenantId } }); _mockDapperWrapper .Setup(x => x.ExecuteAsync(mockConnection.Object, $"DELETE FROM {table} WHERE TenantId = @tenantId;", It.Is<object>(p => p.Equals(new { tenantId })), mockTransaction.Object)) .ReturnsAsync(1); }
通过 NpgsqlConnection::ExecuteAsync 使用纯查询文本创建存储过程
我正在尝试从 C# 通过 Npsql 创建一个 stpored 过程 私有异步任务 TestExecute(string cmdQuery) { var cnnString = $"服务器=localhost;用户ID=admin;密码=somepass;
我正在将 Dapper 与 SQLite 结合使用。 我有一个定义如下的表: 创建表示例( id 整数不为空, “某个字段”文本 ); 我写了一个控制台应用程序...
我知道有几个问题与我的类似。 Dapper:单元测试 SQL 查询 但我认为上述问题没有一个符合我要求的明确答案。 现在,我正在开发...
我正在尝试使用 Dapper 以一对多关系映射对象。假设一个数据库包含一个 Departments 表和一个 People 表。 People 表有一个 DepartmentId 列来创建关系
PostgreSQL 存储过程因 Dapper 中的日期动态参数而失败
我正在将 PostgreSQL 与 .NET 项目结合使用,并且在使用动态参数传递 DATE 参数时通过 Dapper 执行存储过程时遇到问题。 存储过程定义...
通过 Dapper 传递日期参数时 PostgreSQL 存储过程执行失败
我正在将 PostgreSQL 与 .NET 项目一起使用,并且在传递 DATE 参数时通过 Dapper 执行存储过程时遇到问题。 存储过程定义如下: 创建或重新...
SQLite 查询是“SELECT * FROM tblProducts WHERE Id = 1” 如何使用 Dapper 获取所有值的列表或具有属性和值的字典;
我有一堂课如下: 公开课员工 { 私有 IEmployeeDataAccessor _employeeDataAccessor; 公共雇员(IEmployeeDataAccessor emda) { _employeeDataAccessor = emda ; ...
Dapper '需要一个无参数默认构造函数或一个匹配的签名'
我有一堂课如下: 公开课员工 { 私有 IEmployeeDataAccessor _employeeDataAccessor; 公共雇员(IEmployeeDataAccessor emda) { _employeeDataAccessor = emda ; ...
使用 Dapper 的 Sqlite。解析列时出错。无法将 System.Int64 类型的对象转换为 System.Double
我正在使用 fastcrud 和 dapper 将查询结果映射到我的自定义类型。我调查了 dapper 库,得出的结论是,我认为这是 Microsoft.Data.Sqlite pac 的问题...