【问题标题】:Writing a generic InsertData method using Dapper.Contrib and InsertAsync使用 Dapper.Contrib 和 InsertAsync 编写通用 InsertData 方法
【发布时间】:2021-07-21 08:38:28
【问题描述】:

我对 C# 和 Dapper 还很陌生。我正在尝试为我的项目编写一个通用的插入数据方法。我来自 Delphi 环境,所以我仍然在 C# 中找到自己的方法。

Dapper 似乎使用起来相当简单,但我遇到了一些挑战。我已经尝试了使用以下代码正确获取语法的所有方法,但均未成功。

问题似乎围绕着 T(我还是不太明白 T 是什么),而且我尝试过的所有组合都不起作用。 p>

public async Task<int> InsertData<T>(T list)
{
    string connectionString = _config.GetConnectionString(ConnectionStringName);

    using (IDbConnection connection = new SqlConnection(connectionString))
    {
        return await connection.InsertAsync<int>(list);
    }
}

以下代码确实有效,那么我哪里出错了?

public async Task SaveData<T>(string sql, T parameters)
{
    string connectionString = _config.GetConnectionString(ConnectionStringName);

    using (IDbConnection connection = new SqlConnection(connectionString))
    {
            await connection.ExecuteAsync(sql, parameters);
    }
}

【问题讨论】:

    标签: dapper dapper-contrib


    【解决方案1】:

    您的第二个代码 (await connection.ExecuteAsync(sql, parameters);) 有效,因为您只是在执行您手写的 SQL 语句。方法ExecuteAsync属于Dapper;不是 Dapper.Contrib。通用的T 用于parameters,而不是用于您尝试插入的对象。

    使用您的第一个代码 (return await connection.InsertAsync&lt;int&gt;(list);),您实际上是在使用 Dapper.Contrib;您不是手动编写 SQL 语句。 Dapper.Contrib 为您生成它。

    您的以下代码似乎有问题:

    return await connection.InsertAsync<int>(list);
    

    您将泛型参数 &lt;int&gt; 传递给没有意义的方法。

    我尚未对此进行测试,但我希望将该行更改为以下行:

    return await connection.InsertAsync<T>(list);
    

    此外,您必须通过向其添加 where T : class 来确保泛型类型 T 是类。

    遵循通用方法应该可以达到您的目的;您需要将其转换为 async 以匹配您当前的代码:

    public void InsertData<T>(T entity) where T : class
    {
        string connectionString = ....;
    
        using(IDbConnection connection = new SqlConnection(connectionString))
        {
            long result = connection.Insert<T>(entity);
        }
    }
    

    我不理解您代码中的其他部分。说InsertData&lt;T&gt;(T list)list 是什么?它是单个对象还是对象列表?如果是对象列表,List&lt;T&gt; list 更有意义。如果是单个对象,最好将 list 重命名为实际对象名称,例如 T customer/entity/poco 等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-30
      • 1970-01-01
      • 2018-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多