C# ASP.NET MVC 3-未执行DBContext类

C# ASP.NET MVC 3-未执行DBContext类,c#,asp.net-mvc-3,entity-framework-5,C#,Asp.net Mvc 3,Entity Framework 5,我试图在应用程序启动时,首先通过EF代码为我的应用程序植入一些测试数据 以下是我观察到的: 当我运行应用程序时,执行进入: Application_Start() {} 然后,一旦进入应用程序_Start(),它将登陆: Database.SetInitializer<LocatorContext>(new DropCreateDatabaseAlways<LocatorContext>()); Database.SetInitializer(新的DropCreate

我试图在应用程序启动时,首先通过EF代码为我的应用程序植入一些测试数据

以下是我观察到的:

当我运行应用程序时,执行进入:

Application_Start() {}
然后,一旦进入应用程序_Start(),它将登陆:

Database.SetInitializer<LocatorContext>(new DropCreateDatabaseAlways<LocatorContext>());
Database.SetInitializer(新的DropCreateDatabaseAlways());
但它从未进入DBContext类(ClubLocatorContext.cs), 这就是播种发生的地方,还有其他事情

任何关于我为什么或如何修复它的想法都将不胜感激

My Global.asax.cs文件

//Global.asax.cs
protected void Application_Start()
{
    Database.SetInitializer<LocatorContext>(new DropCreateDatabaseAlways<LocatorContext>());

    AreaRegistration.RegisterAllAreas();
    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);
}
//Global.asax.cs

受保护的无效应用程序\u Start() { SetInitializer(新的DropCreateDatabaseAlways()); RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters); 注册地址(RouteTable.Routes); }
我的DBContext类

//ClubLocatorContext.cs        
using System;
using System.Collections.Generic;
using System.Data.Entity.ModelConfiguration.Conventions;
using System.Linq;
using System.Web;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using ClubLocator.Models;
using ClubLocator.Models.ViewModels;

namespace ClubLocator.DAL
{
    public class LocatorContext : DbContext
    {

      public DbSet<Prospect> Prospects { get; set; }

      protected override void OnModelCreating(DbModelBuilder modelBuilder)
      {
          base.OnModelCreating(modelBuilder);
          modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
      }

      public void Seed(LocatorContext context)
      {
          var prospect = new List<Prospect>
                         {
                              new Prospect
                              {
                                      FirstName = "John",
                                      LastName = "Smith",
                                      Address1 = "1313 Mockingbird Lane",
                                      Email = "jsmith@example.com"
                              }
                         };

          prospect.ForEach(r => context.Prospects.Add(r));
          context.SaveChanges();
      }

      public class DropCreateIfChangeInitializer : DropCreateDatabaseIfModelChanges<LocatorContext>
      {
          protected override void Seed(LocatorContext context)
          {
              context.Seed(context);
              base.Seed(context);
          }
      }

      public class CreateInitializer : DropCreateDatabaseAlways<LocatorContext>
      {
          protected override void Seed(LocatorContext context)
          {
              context.Seed(context);
              base.Seed(context);
          }
      }

      static LocatorContext()
      { 
          #if DEBUG
          Database.SetInitializer<LocatorContext> (new DropCreateIfChangeInitializer ());
          #else
          Database.SetInitializer<LocatorContext> (new CreateInitializer ());
          #endif
      }
    }
}
//ClubLocatorContext.cs
使用制度;
使用System.Collections.Generic;
使用System.Data.Entity.ModelConfiguration.Conventions;
使用System.Linq;
使用System.Web;
使用System.Data.Entity;
使用System.Data.Entity.Infrastructure;
使用ClubLocator.Models;
使用ClubLocator.Models.ViewModels;
命名空间ClubLocator.DAL
{
公共类定位器上下文:DbContext
{
公共数据库集前景{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Conventions.Remove();
}
公共空种子(定位器上下文)
{
var prospect=新列表
{
新前景
{
FirstName=“约翰”,
LastName=“史密斯”,
Address1=“1313模仿鸟巷”,
电子邮件=”jsmith@example.com"
}
};
ForEach(r=>context.Prospects.Add(r));
SaveChanges();
}
公共类DropCreateIfChangeInitializer:DropCreateDatabaseIfModelChanges
{
受保护的覆盖无效种子(LocatorContext上下文)
{
上下文。种子(上下文);
种子(上下文);
}
}
公共类CreateInitializer:DropCreateDatabaseAlways
{
受保护的覆盖无效种子(LocatorContext上下文)
{
上下文。种子(上下文);
种子(上下文);
}
}
静态定位器上下文()
{ 
#如果调试
Database.SetInitializer(新的DropCreateIfChangeInitializer());
#否则
Database.SetInitializer(新的CreateInitializer());
#恩迪夫
}
}
}

它只是设置初始值设定项,而不是初始化。当您访问数据库时,它将创建数据库和种子数据。Jason,谢谢。从应用程序_Start()内部看是什么样子的:?它只是设置初始值设定项,而不是初始化。当您访问数据库时,它将创建数据库和种子数据。Jason,谢谢。从应用程序_Start()内部看是什么样的:?Jason,我在上下文类中看到了该方法,但VS中的intellisense不喜欢这种语法。你能告诉我从应用程序_Start()内部看它应该是什么样子吗?感谢您创建了DropCreateIfChangeInitializer,它扩展了DropCreateDatabaseIfModelChanges,后者具有公共方法InitializeDatabase。所以我不明白为什么你不能在应用程序中调用这个方法。intellisense中出现的仅有两种方法是DropCreateDatabaseAlways和DropCreateDatabaseIfModelChangesprotected void应用程序_Start(){new DropCreateIfChangeInitializer().InitializeDatabase(new LocatorContext());}如果仍然不起作用,可以将代码粘贴到应用程序_Start.Jason中,我在上下文类中看到了该方法,但VS中的intellisense不喜欢这种语法。你能告诉我从应用程序_Start()内部看它应该是什么样子吗?感谢您创建了DropCreateIfChangeInitializer,它扩展了DropCreateDatabaseIfModelChanges,后者具有公共方法InitializeDatabase。所以我不明白为什么你不能在应用程序中调用这个方法。intellisense中出现的仅有两个方法是DropCreateDatabaseAlways和DropCreateDatabaseIfModelChangesprotected void应用程序_Start(){new DropCreateIfChangeInitializer().InitializeDatabase(new LocatorContext());}如果仍然不起作用,可以在应用程序_Start中粘贴代码。
new DropCreateIfChangeInitializer()
                .InitializeDatabase(new LocatorContext());