在存储库 class 中使用 DBContext

Using DBContext in repository class

我想在我的存储库 class 中使用我的 DBcontext,但我现在不知道如何使用。我已经尝试查看其他问题,但它们没有提供针对我的情况所需的特定答案。

我将从我的控制器开始:

public class MovieController : ControllerBase
{
    IMovieService _movieService;
    public MovieController(IMovieService movieService)
    {
        _movieService = movieService;
    }

服务class:

public interface IMovieService
{
    Movie RetrieveMovie(long id);
    IEnumerable<Movie> RetrieveMovies();
}

public class MovieService : IMovieService
{
    IMovieRepository _movieRepository;

    public MovieService(IMovieRepository movieRepository)
    {
        _movieRepository = movieRepository;
    }

存储库class:

public interface IMovieRepository
{
    Movie GetMovieById(long id);
    IEnumerable<Movie> GetMovies();
}

public class MovieRepository : IMovieRepository
{
    private readonly MusicContext _db;
    public Movie GetMovieById(long id)
    {
        return _db.Movie.Find(id);
    }

数据库上下文:

public class MovieContext : DbContext
{
    public MovieContext(DbContextOptions<MovieContext> options)
        : base(options)
    {
    }

    public DbSet<Movie> Movies { get; set; }
}

最后我的启动函数:

public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<MovieContext>(options =>                                
        options.UseSqlServer(Configuration.GetConnectionString("MovieContext")));
        services.AddControllers();
        services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new OpenApiInfo { Title = "Movie.Api", Version = "v1" });
        });
    }

目前 Visual studio 警告我@MusicContext _db 这个字段从未分配给,我明白了。我怎样才能让它工作?

您必须将构造函数添加到 MovieRepository 并使用 DI

public class MovieRepository : IMovieRepository
{
    private readonly MovieContext _db;

    public MovieRepository (MovieContext db)
   {
            _db=db;
   }

    public Movie GetMovieById(long id)
    {
        return _db.Movie.Find(id);
    }
    .....
}