我在 .NET Core 6.0 中有一个最小的 API,在存储库模式中使用 ADO.NET

问题描述 投票:0回答:1

我正在使用带有服务的最小 API,该服务调用 .NET Core 6.0 中的存储库。我希望能够将连接字符串传递到我的存储库。

这是我的项目树:

这个想法是程序具有调用服务的端点,然后服务调用存储库。

我正在尝试从存储库获取连接字符串。

program.cs
中,我使用的构建器如下:

var builder = WebApplication.CreateBuilder(args);
...
var app = builder.Build();

方法如下:

app.MapPost("/create",
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme, Roles = 
"Administrator")]
(Movie movie, IMovieService service) => Create(movie, service))
.Accepts<Movie>("application/json")
.Produces<Movie>(statusCode: 200, contentType: "application/json");

这些函数使用的方法如下所示:

IResult Create(Movie movie, IMovieService service)
{
    var result = service.Create(movie);
    return Results.Ok(result);
}

然后服务上有一些方法,如下所示:

namespace MinimalJwt.Services
{
    public class MovieService : IMovieService
    {
        private readonly MovieRepository movieRepository = new MovieRepository();

        public Movie Create(Movie movie)
        {
            movie = movieRepository.CreateNewMovie(movie);
            return movie;
        }
    }
}

最后我试图让我的存储库看起来像现在这样

namespace MinimalJwt.Repositories
{
    public class MovieRepository : IMovie
    {
        public IConfiguration _configuration;
        
        public MovieRepository(IConfiguration config)
        {
            this._configuration = config;
        }

        public IList<Movie> GetMovies()
        {
            List<Movie> movies = new List<Movie>();

            using (SqlConnection con = new SqlConnection(_configuration.GetConnectionString("MoviesContextDb")))
            {
                SqlCommand cmd = new SqlCommand("spGetAllMovies", con);
                cmd.CommandType = CommandType.StoredProcedure;

                con.Open();

                SqlDataReader rdr = cmd.ExecuteReader();

                while (rdr.Read())
                {
                    var movie = new Movie()
                    {
                        Id = Convert.ToInt32(rdr["Id"]),
                        Title = rdr["Title"].ToString(),
                        Description = rdr["Description"].ToString(),
                        Rating = Convert.ToDouble(rdr["Rating"])
                    };

                    movies.Add(movie);
                }

                return (movies);
            }
      }
}
  

这个想法是让存储库能够使用

appsettings.json
内部的连接字符串。

非常感谢任何帮助。

提前致谢。

c# ado.net .net-6.0 connection-string minimal-apis
1个回答
0
投票

您的 appsettings.json 文件应该如下所示。那么应该可以工作了。

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "ConnectionStrings": {
    "MoviesContextDb": "Connection String details"
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.