Asp.net mvc 在添加到Razor页面的新MVC控制器中引用DbContext

Asp.net mvc 在添加到Razor页面的新MVC控制器中引用DbContext,asp.net-mvc,dbcontext,razor-pages,Asp.net Mvc,Dbcontext,Razor Pages,我有一个纯.NETCore2.2RazorPages应用程序,没有MVC模块。 然后我添加了一个控制器文件夹,一个视图文件夹,并使用了我已有的Models文件夹 我试图在新控制器中引用我的数据库,但似乎无法获取语法。 下面是我的working Courses Page.cs文件,顶部是working DbContext: namespace OESAC.Pages.Courses { public class IndexModel : PageModel { pu

我有一个纯.NETCore2.2RazorPages应用程序,没有MVC模块。 然后我添加了一个控制器文件夹,一个视图文件夹,并使用了我已有的Models文件夹

我试图在新控制器中引用我的数据库,但似乎无法获取语法。 下面是我的working Courses Page.cs文件,顶部是working DbContext:

namespace OESAC.Pages.Courses
{
    public class IndexModel : PageModel
    {
        public readonly MyDbContext _context;
        public IndexModel(MyDbContext context)
        {
            _context = context;
        }
下面是我的MVC控制器代码的顶部,我以为我已经找到了,但是我得到了一个错误

System.NullReferenceException:“对象引用未设置为对象的实例。” _配置为空

最后两行是我得到错误的地方(保存更改)。常规数据驱动的Razor页面使用db.SaveChanges,因为我有正确的语法来声明_上下文

namespace OESAC.Controllers
{
    public class HomeController : Controller
    {

        MyDbContext db = new  MyDbContext();


 public ActionResult StartTransaction(string oesacID, string fee)
        {
            var model = new Models.PayPalTransactions();

            string strToday = DateTime.Today.ToString();

            model.TransactionDate = DateTime.Parse(strToday);
            model.RecordCreated = DateTime.Parse(strToday);
            model.CourseID = 4444;
            model.SponsorID = 3333;
            model.AmountCharged = 1;

            //INSERT TRANSACTION ROW IN TRANSACTION TABLE

           db.PayPalTransactions.Add(model);
           db.SaveChanges();

您也可以在控制器中使用依赖项注入

public class HomeController : Controller
{
    private readonly MyDbContext _context;

    public HomeController(MyDbContext context)
    {
        _context = context;
    }
    ...
}

Net核心使用DI,您可以尝试在启动类中注册dbContext。谢谢您。你让我开心。我花了将近一周的时间试图让PayPal使用Razor页面。最后添加了控制器和视图,并使用了一些旧的MVC代码。它像一个魔咒一样,一下子就成功了,到了沙箱又回来了,但现在值回来了,但这是另一个就寝时间的另一个故事。非常感谢。