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

I have a minimal API in .NET Core 6.0 using ADO.NET in a repository pattern

提问人:paula.em.lafon 提问时间:11/5/2023 最后编辑:marc_spaula.em.lafon 更新时间:11/7/2023 访问量:66

问:

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

这是我的项目树:

enter image description here

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

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

在 中,我使用如下构建器: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 连接字符串 最小 API

评论

1赞 Peppermintology 11/5/2023
您遇到的实际错误/问题是什么?

答:

0赞 EMyAccount 11/7/2023 #1

appsettings.json 文件应如下所示。然后,您的代码应该可以工作了。

{ 
  "ConnectionStrings": {
    "MoviesContextDb": "Connection String details"
  }
   //.....other configurations.........
}