You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Repository仓储类中正确注入并使用自定义DBContext

问题解决步骤

1. 修正MovieRepository的错误

你当前的仓储类存在3处问题:

  • 上下文类型笔误:你定义的上下文类是MovieContext,但仓储里写的是MusicContext
  • 没有构造函数接收注入的上下文实例,导致_db字段未赋值
  • 访问DbSet的名称错误:你在MovieContext中定义的DbSet是Movies,但仓储里写的是_db.Movie

修改后的仓储类代码如下:

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

public class MovieRepository : IMovieRepository
{
    private readonly MovieContext _db;
    // 新增构造函数,接收DI容器注入的MovieContext实例
    public MovieRepository(MovieContext db)
    {
        _db = db;
    }

    public Movie GetMovieById(long id)
    {
        // 修正DbSet名称为Movies
        return _db.Movies.Find(id);
    }

    // 补充GetMovies方法的实现
    public IEnumerable<Movie> GetMovies()
    {
        return _db.Movies.ToList();
    }
}

2. 补充MovieService的方法实现

你当前只定义了服务的注入逻辑,没有实现接口的方法,补充代码如下:

public class MovieService : IMovieService
{
    IMovieRepository _movieRepository;

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

    public Movie RetrieveMovie(long id)
    {
        return _movieRepository.GetMovieById(id);
    }

    public IEnumerable<Movie> RetrieveMovies()
    {
        return _movieRepository.GetMovies();
    }
}

3. 在Startup中注册服务和仓储的依赖映射

你当前只注册了MovieContext,没有注册IMovieService和IMovieRepository的依赖关系,DI容器无法自动实例化这两个类型,需要在ConfigureServices方法中补充注册代码:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<MovieContext>(options =>                                
    options.UseSqlServer(Configuration.GetConnectionString("MovieContext")));
    
    // 新增依赖注册
    services.AddScoped<IMovieRepository, MovieRepository>();
    services.AddScoped<IMovieService, MovieService>();
    
    services.AddControllers();
    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new OpenApiInfo { Title = "Movie.Api", Version = "v1" });
    });
}

4. 确认配置项

确保你的appsettings.json中已经配置了名称为MovieContext的数据库连接字符串,且Movie实体类的字段和数据库表结构匹配。

内容的提问来源于stack exchange,提问作者MrEmper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 04:15:07