微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将我的数据库调用从 Web API 移动到类库?

如何解决如何将我的数据库调用从 Web API 移动到类库?

我有具有此调用的 Web Api:

[HttpGet("getLocation")]
public async Task<IActionResult> GetLocation([FromQuery] int id)
{
    var ConnectionString = new ConnectionStringsOptions();
    _Configuration.GetSection(ConnectionStringsOptions.ConnectionStrings).Bind(ConnectionString);
    using (IDbConnection cnn = new sqlConnection(ConnectionString.ConnectionString))
    {
        var _id = new
        {
            ID = id
        };
        string sql = @"SELECT * FROM [dbo].[fLocationFilter](@ID)";
        var _Location = await cnn.QueryAsync<Location>(sql,_id);
        return Ok(_Location);
    }
}

我想将该调用从 API 移动到我的类库,如下所示:

public async Task<IActionResult> GetLocation([FromQuery] int id)
{
    var _location= Mylibrery.getCall(string connectionString,int id);
    return Ok(_location);
}

我可以在不使用任务的情况下拨打电话吗?这会影响性能

我用于类库 .NET Core 5 和 ASP.NET Core 5。
更新:主要问题是如何获取从类库传递到 API 的 actionResult

解决方法

您的库中的代码可能如下所示:

public class Repository : IRepository
{
    private readonly string _connectionString;

    public Repository(IConfiguration configuration /* ILogger,etc */)
    {
        _connectionString = /* get connection string from configuration */
    }

    public async Task<Location> GetLocation(int id)
    {
        using (IDbConnection cnn = new SqlConnection(_connectionString))
        {
            var _id = new { ID = id };
            string sql = @"SELECT * FROM [dbo].[fLocationFilter](@ID)";
            var location = await cnn.QueryAsync<Location>(sql,_id);
            return location;
        }
    }
}

它在控制器中的使用看起来像这样:

public class SomeController
{
    private readonly IRepository _repository;

    public SomeController(IRepository repository /* ILogger,etc */)
    {
        _repository = repository;
    }

    [HttpGet("getLocation")]
    public async Task<IActionResult> GetLocation([FromQuery] int id)
    {
        var location = await _repository.GetLocation(id);
        return Ok(location);
    }
}

如果您想获得较高的服务整体性能,您绝对应该使用任务,或者更确切地说,使用异步代码。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。