EF .Net Core достичь класса из контроллера - PullRequest
0 голосов
/ 06 апреля 2019

У меня есть основной проект .net и я хочу подключить БД с ef. Ниже код моего контекста БД.

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

        //protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        //{
        //    optionsBuilder.UseMySql(@"Server=localhost;Database=kariyer_portal;Uid=root;Pwd=1234;");
        //}
        public DbSet<Student> Students { get; set; }

        public DbSet<University> Universities { get; set; }

        public DbSet<Bolum> Bolums { get; set; }

        public DbSet<Admin> Admins { get; set; }

        public DbSet<Announcement> Announcements { get; set; }
    }

В Startup.class я написал соединение.


public void ConfigureServices(IServiceCollection services)
        {

            services.AddSingleton<ITest, MyConfig>();
            services.AddMvc();
            services.AddMvc().AddJsonOptions( options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore );


            services.AddDbContext<YTContext>(options => options.UseMySql(Configuration.GetConnectionString("MySqlCon")));

        }

В моем классе репозитория я написал ниже.

public class StudentRepository
    {
        private readonly YTContext _db;
        public StudentRepository(YTContext context)
        {
            _db = context;
        }

        public  List<Student> GetStudents(int page, int limit = 8, string query = null)
        {
            try
            {
                var skip = (page - 1) * limit;
                var students = _db.Students.Where(x => query == null || x.Name.Contains(query) || x.Surname.Contains(query) || x.University.Name.Contains(query) || x.Bolum.Name.Contains(query))
                    .Include(x=>x.Bolum).Include(x=>x.University)
                    .Skip(skip).Take(limit).ToList();
                return students;
            }
            catch (Exception ex)
            {
                return null;
            }

        }
    }

Моя проблема в том, что я не могу добраться до этого класса из кода контроллера ниже.


 public class StudentController : Controller
    {

        public StudentRepository repo;
        [HttpGet]
        public IActionResult List()
        {
            var students = repo.GetStudents(1, 6,null);
            return View(students);
        }

        [HttpPost]
        public IActionResult Paginate(Paginate paginate)
        {
            var students = repo.GetStudents(paginate.page, paginate.limit,paginate.query);
            return Json(new {status = 200, student = students});
        }
    }
public StudentRepository repo;

Приведенный выше код возвращает null в контроллере. Как я могу достичь этого класса с контроллера?

1 Ответ

3 голосов
/ 06 апреля 2019

Вам необходимо зарегистрировать его в DI-контейнере в Startup:

services.AddScoped<StudentRepository, StudentRepository>();

А затем внедрите его в конструктор вашего контроллера:

public StudentController(StudentRepository studentRepo) {
    repo = studentRepo;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...