标签: dapper

Dapper Query 与 QueryMultiple 性能

我目前正在使用查询 8 次Query<>(8 次是因为我必须将一些列转换为 JSON,有时是单独的)来生成所需的完整结果集。但是,我想知道是否可以通过使用QueryMultiple. 我有一个假设QueryMultiple可以同时查询所有这些表,因此我不必等待每个查询完成。

我还有另一种选择。它是*Async方法的使用版本。

QueryMutiple但是,如果不显着更改代码,我就无法实现。我应该使用常规方法QueryMutiple还是*Async常规方法的版本?两种替代方案之间的权衡是什么?我应该使用哪一种?

c# dapper

2
推荐指数
1
解决办法
2831
查看次数

Dapper 无法识别单引号中的通配符参数

我正在尝试从数据库获取索引碎片信息。

这里是简洁的 sql 查询:

var result = await _dbConnection.QueryAsync<IndexFragmentationModel>($@"
        select
        a.index_id as Id, name as Name, avg_fragmentation_in_percent as FragmentationPercent 
        from sys.dm_db_index_physical_stats (DB_ID(N'@dbName'), OBJECT_ID(N'@tableName'), null, null, null) as a  
        join sys.indexes as b on a.object_id = b.object_id and a.index_id = b.index_id;    
        ", new
        {
            dbName = dbName,
            tableName = tableName
        });
        return result.ToList();
Run Code Online (Sandbox Code Playgroud)

参数没有传递到预期的位置。

有人可以建议吗 - 也许还有另一种方法可以通过它们?

c# sql-server dapper

2
推荐指数
1
解决办法
991
查看次数

Dapper - 将 int 列表传递给存储过程

我的存储过程SQL语句非常简单。

Delete From TableName where ID IN (@id)
Run Code Online (Sandbox Code Playgroud)

我想从 C# 代码传递列表或数组,并希望返回已删除的行数。

下面是我的代码,不知怎的,我不相信并认为这不是正确的方法。这样做的有效方法是什么?

using (SqlConnection connection = new SqlConnection(_connectionString))
{
    await connection.OpenAsync();

    DynamicParameters parameters = new DynamicParameters();

    foreach (var id in ids)
    {
        parameters.Add("@Id", id, DbType.Int32, ParameterDirection.Input);

        await connection.ExecuteAsync(
            ProcedureNames.DeleteRules,
            parameters,
            commandType: CommandType.StoredProcedure);
    }
}
Run Code Online (Sandbox Code Playgroud)

c# stored-procedures dapper

2
推荐指数
1
解决办法
6316
查看次数

“QueryFirstOrDefault&lt;T&gt;”和“ExecuteScalar&lt;T&gt;”之间有什么区别?

QueryFirstOrDefault<T>在 Dapper 中,和的用法有什么区别ExecuteScalar<T>

两者似乎都返回单个值,但QueryFirstOrDefault<T>如果未找到,则会返回该类型的默认值。由于性能或其他原因,您是否应该始终更喜欢使用两者之一,或者它们是否等效,而忽略返回的默认值?

c# dapper

2
推荐指数
1
解决办法
6561
查看次数

获取从 dapper.QueryMultiple 方法返回的结果集的数量

我使用 Dapper 库。我有一个动态查询,它从 QueryMultiple 方法返回一个或多个结果集/表。我没有任何具体的结果集数量可以写。Read() 方法的。我们是否有任何函数或方法(例如 result.Count = 返回表的数量)或有多少个。我们可以编写 read() 来检索 N 次。结果集?

SqlMapper.GridReader result = _connection.QueryMultipleAsync(model.APIName, oPara, commandType: CommandType.StoredProcedure).Result;

dynamic dyn = result.Read();
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc dapper asp.net-web-api dapper-extensions

2
推荐指数
1
解决办法
1982
查看次数

插入、更新、删除记录时返回记录的id

当我使用 Dapper 插入、更新或删除实体时,我需要返回id实体的。

我正在使用这段代码:

var role = await roleConnection.ExecuteAsync("UPDATE Role SET IsDelete = @isDelete, RoleName = @roleName, SecurityStamp = @securityStamp WHERE Role.Id = @id SELECT SELECT CAST(SCOPE_IDENTITY() AS INT)"
                     , new
                     {
                         isDelete = request.IsDelete = false,
                         roleName = request.RoleName,
                         securityStamp = Guid.NewGuid(),
                         id = request.Id
                     });
Run Code Online (Sandbox Code Playgroud)

但它没有向我显示任何内容。

我怎样才能做到这一点?

c# asp.net dapper asp.net-core

2
推荐指数
1
解决办法
4372
查看次数

在 Parallel.ForEach 循环内进行数据库调用异步会提高性能吗?

使用 Parallel.ForEach 时,将任何 DB 或 Api 调用转换为异步方法是否会提高性能?

一些背景知识,我目前有一个控制台应用程序,它按顺序循环访问一堆文件,并为每个文件调用一个 API 并进行一些数据库调用。主要逻辑如下:

foreach (file in files)
{
    ReadTheFileAndComputeAFewThings(file);
    CallAWebService(file);
    MakeAFewDbCalls(file);
}
Run Code Online (Sandbox Code Playgroud)

目前,所有数据库和 Web 服务调用都是同步的。

Parallel.ForEach正如您所期望的那样,更改要使用的循环给我带来了巨大的性能提升。

我想知道是否将调用保留Parallel.ForEach在那里,并在循环内将所有 Web 服务调用更改为异步(例如,HttpClient.SendAsync)并将 DB 调用更改为异步(使用 Dapper,db.ExecuteAsync()) - 这是否会通过允许它来提高应用程序的性能重用线程?或者它实际上什么都不做,因为Parallel.ForEach无论如何都会处理线程分配?

c# parallel-processing httpclient task dapper

2
推荐指数
1
解决办法
2975
查看次数

如何在 postgresSQL 的 dapper 参数中传递日期时间格式?

对于 PostgreSQL 中的表的查询,我能够正确获取数据。

var query = "Select Id,name from employee
where
joiningTime BETWEEN '{startDateTime:yyyy-MM-dd HH:mm:ss}' AND '{endDateTime:yyyy-MM-dd HH:mm:ss}'"
Run Code Online (Sandbox Code Playgroud)

数据返回正确,但由于这种方法容易发生 SQL 注入,我想将其更改为参数化方式

var query = "Select Id,name from employee
    where
    joiningTime BETWEEN '@startDateTime' AND '@endDateTime'"


var result = dbConnection.Query<Result>(query, new {startDateTime, endDateTime }); 
Run Code Online (Sandbox Code Playgroud)

怎么还能带参数传递格式呢?

c# postgresql dapper

2
推荐指数
1
解决办法
8899
查看次数

如何使用 Dapper 检查空值

我有一个 SQL 表“国家”,其中包含 CountryId 和 StateId。StateId 可以为 null,因为并非所有国家/地区都有州。我想检查表中是否存在国家/州的组合。如果表中的国家/地区为“NL”且州为 NULL,并且我使用以下查询,其中countryId =“NL”且 stateId = null:

return await conn.ExecuteScalarAsync<bool>(@"SELECT COUNT(*)
                                             FROM [dbo].[Countries]
                                             WHERE [CountryId] = @CountryId
                                             AND [StateId] = @StateId",
                                             new { countryId, stateId });
Run Code Online (Sandbox Code Playgroud)

它将返回 false。我期待一个真实的回应。有人可以解释这种行为以及解决此问题的最佳方法是什么吗?

.net c# dapper

2
推荐指数
1
解决办法
3870
查看次数

使用 Dapper 查询单个项目并转换为模型

我正在使用 Dapper 从数据库中查询单个列。列内容是 Json 字符串。我想直接给它消毒。我的代码看起来像这样

string sql =@"SELECT [col1] FROM [table] where col3=@col3"
var data= await _connection.QuerySingleOrDefaultAsync<mymodelclass>(sql, parameters);
Run Code Online (Sandbox Code Playgroud)

一切对我来说看起来都不错,但这只给出了空的对象。我的模型类结构

public  class mymodelclass
{
    public string LevelTwo { get; set; }
    public string LevelThree { get; set; }
    public string LevelFour { get; set; }
    public string LevelFive { get; set; }
}
  
Run Code Online (Sandbox Code Playgroud)

第 1 栏内容

{
    "LevelTwo": "05 Planning, Budgeting and Forecasting",
    "LevelThree": "5A Planning, Budgeting and Forecasting",
    "LevelFour": "5A.07 Prepare Forecasts, Finalize Presentations / Reports",
    "LevelFive": "zxczx",
}
Run Code Online (Sandbox Code Playgroud)

c# dapper

2
推荐指数
1
解决办法
1565
查看次数