【问题标题】:How to move my database calls from the Web API to Class Library?如何将我的数据库调用从 Web API 移动到类库?
【发布时间】:2021-05-17 07:31:12
【问题描述】:

我有这个调用的 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。
更新:主要问题是如何将 actionResult 从类库传递到 API

【问题讨论】:

    标签: c# asp.net-mvc asp.net-core class-library


    【解决方案1】:

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

    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);
        }
    }
    

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-29
    • 2012-03-23
    • 2014-11-18
    • 1970-01-01
    相关资源
    最近更新 更多