Создание класса базы данных в MVC - PullRequest
0 голосов
/ 20 февраля 2019

Я хочу подробнее остановиться на следующем вопросе:

Как создать экземпляр DbContext в EF Core

Я выполнил вышеуказанное в своем контроллере, но ясейчас пытаюсь создать DataAccess.cs, где я хочу, чтобы все мои методы / запросы к базе данных происходили.Например, у меня пока есть следующее:

Контроллер:

public class HomeController : Controller
    {
        DataAccess da = new DataAccess() { };

        private readonly DatabaseContext db;

        public HomeController(DatabaseContext reg)
        {
            db = reg;
        } 

    [HttpPost, ValidateAntiForgeryToken]
    public IActionResult Register(User model)
    {       
        model.WindowsAuth = User.Identity.Name;

        if (ModelState.IsValid) 
        {
            da.Registration(model, db);                
            return RedirectToAction("Index");
        }

In DataAccess.cs

 public class DataAccess
 {        
    public void Registration(User model, DatabaseContext db)
    {
        User newUser = new User();
        db.Users.Add(model);
        db.SaveChanges();
    }
 }

Контекст базы данных

public class DatabaseContext :DbContext
{


    public DatabaseContext(DbContextOptions<DatabaseContext> options)
               : base(options)
    {
    }

    public DbSet<User> Users { get; set; }

}

Выше работает, но я хочу добавить больше методов в DataAccess.cs.Нужно ли будет передавать мою базу данных в качестве параметра от контроллера каждый раз?Переменная db становится нулевой, когда я пытаюсь создать экземпляр класса контекста в своем классе доступа к данным.Я новичок в MVC, поэтому любые дальнейшие чтения или источники, связанные с этим, будут оценены.

1 Ответ

0 голосов
/ 20 февраля 2019

С помощью DI вы должны ввести DataAccess в контроллер и DatabaseContext в DataAccess.Также не забудьте зарегистрировать DataAccess в DI контейнер:

public class HomeController : Controller
{
    private readonly DataAccess da;// = new DataAccess() { };
    //private readonly DatabaseContext db;   
    public HomeController(DataAccess da)
    {
        this.da = da;
    } 
}

public class DataAccess
{
    private readonly DatabaseContext db;     
    public DataAccess(DatabaseContext db)
    {
        this.db = db;
    }

    public void Registration(User model/*, DatabaseContext db*/)
    {
        User newUser = new User();
        db.Users.Add(model);
        db.SaveChanges();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...