代码优先的MVC不会开始

本文关键字:开始 MVC 代码 | 更新日期: 2023-09-27 18:03:16

我首先使用代码来开发我的MVC应用程序的数据库。

它使用SQL身份验证,因为我还没有确定的原因,Windows认证不允许我在服务器上做任何事情…

这是Application_Start ():

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        OrtundDB.InitializeDB();
    }

这个类调用db.Database.Initialize(true);并运行我编写的一个方法来向数据库中添加一些默认信息

public static class OrtundDB
{
    private static OrtundDBContext db = new OrtundDBContext();
    public static void InitializeDB()
    {
        db.Database.Initialize(true);
        db.InitializeDB();
    }
}

下面是我编写的正在使用的DBContext类。它存在于MVC项目中引用的另一个项目中:

internal class OrtundDBContext : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        // modelBuilder.Configuration.Adds()
    }
    public OrtundDBContext()
        : base("OrtundWebConnectionString")
    {
        Database.SetInitializer<OrtundDBContext>(new DropCreateDatabaseAlways<OrtundDBContext>());
    }
    public void InitializeDB()
    {
        // inserts the default data - an admin user account and information for user roles
    }
    // DbSet calls here
}

我以前用同样的方法构建了一个MVC应用程序,这个方法有效。然而,这甚至不会每次都执行Application_Start()

在奇怪的情况下,它已经执行了Application_Start,它一直执行db.Database.Initialize(true);,在这一点上,它似乎永远不会结束。我没有得到错误,但操作似乎没有完成。

当涉及到MVC时,我有点新手,所以我不知道问题可能是什么或如何修复它。

任何帮助解决这个问题(并可能解释导致这个问题的原因)将不胜感激。

提前感谢!

代码优先的MVC不会开始

也许问题在于您对Application_Start的期望。
当应用程序被加载到IIS上的应用程序池中时,Application_Start被调用一次。只有当应用程序池被回收或IIS重新启动时,它才会被再次调用。

读取IIS管道需要10-15分钟这将有助于了解正在发生的事情。

由于我对线程和请求的错误期望,我有一个讨厌的错误。

要考虑的备选方案,并在调试中测试,看看它们是否适合您:

INIT在Global。asax

 public override void Init() {
        base.Init();
        // handlers managed by ASP.Net during Forms authentication
        BeginRequest += new EventHandler(BeginRequestHandler);
      //  PostAuthorizeRequest += new EventHandler(PostAuthHandler);
        EndRequest += new EventHandler(EndRequestHandler);
    }

更好:为所有控制器设置一个baseController 以便控制每次调用的bootstrap

   public class SomeController : MyBaseMvcController{
    // whatever as usual....
   }

[System.Web.Mvc.Authorize]
[MyMVCFilter]  // see the filter below.  Get the MVC pipeline to call your code on Executing
public abstract class MyBaseMvcController : Controller
{
    protected MyBaseMvcController () {
          // a place to get a NEW uow or new Context ....
    }
}
public class MyMVCFilter : System.Web.Mvc.ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext) {
     // a useful bootstrap option when you need the httpContext for bootstrap.
     BootStrapHttp(filterContext.HttpContext);
     base.OnActionExecuting(filterContext);
    }

}