在MVC中创建数据库类

时间:2019-02-20 05:58:08

标签: c# asp.net-core model-view-controller

我想扩展以下问题:

How to instantiate a DbContext in 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");
        }

在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变量显示为null。我是MVC的新手,所以任何进一步的阅读或与此相关的资料将不胜感激。

1 个答案:

答案 0 :(得分:1)

DI 的帮助下,您应将DataAccess注入控制器,并将DatabaseContext注入DataAccess。另外,不要忘记在 DI 容器中注册DataAccess

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();
    }
}