[英]ASP.NET MVC 3 - DBContext Class Not Being Executed
I am trying to seed my application with some test data via EF Code First, when the app starts up. 当应用启动时,我试图通过EF Code First将一些测试数据植入我的应用。
Here is what I am observing: 这是我正在观察的内容:
When I run the app, execution goes into: 当我运行应用程序时,执行进入:
Application_Start() {}
And then once in Application_Start() it lands on: 然后一旦进入Application_Start(),它就会落在:
Database.SetInitializer<LocatorContext>(new DropCreateDatabaseAlways<LocatorContext>());
But it never makes it into the DBContext class (ClubLocatorContext.cs), which is where the seeding happens, among other things. 但是它永远不会进入DBContext类(ClubLocatorContext.cs),该类是发生种子的地方。
Any thoughts as to why or how I can fix it would be much appreciated. 关于为什么或如何解决它的任何想法将不胜感激。
My Global.asax.cs File 我的Global.asax.cs文件
//Global.asax.cs
protected void Application_Start()
{
Database.SetInitializer<LocatorContext>(new DropCreateDatabaseAlways<LocatorContext>());
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
My DBContext Class 我的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
}
}
}
new DropCreateIfChangeInitializer()
.InitializeDatabase(new LocatorContext());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.