Asp.net mvc 为什么不是';t正在ASP.NET MVC4中使用EF CodeFirst创建我的数据库

Asp.net mvc 为什么不是';t正在ASP.NET MVC4中使用EF CodeFirst创建我的数据库,asp.net-mvc,entity-framework,Asp.net Mvc,Entity Framework,我一直在关注Julie Lerman关于使用EF CodeFirst从代码生成数据库的教程。我正在使用MVC4并使用默认控制器。我要做的就是生成数据库。然而,在她的教程中,她正在使用一个控制台应用程序,并在她的主函数中调用create_blog方法。create_blog函数按照其名称创建数据库 在我的Global.asax中,我有: Database.SetInitializer(new CIT.Models.SampleData()); 这是我的SampleData类: public c

我一直在关注Julie Lerman关于使用EF CodeFirst从代码生成数据库的教程。我正在使用MVC4并使用默认控制器。我要做的就是生成数据库。然而,在她的教程中,她正在使用一个控制台应用程序,并在她的主函数中调用create_blog方法。create_blog函数按照其名称创建数据库

在我的Global.asax中,我有:

Database.SetInitializer(new CIT.Models.SampleData());
这是我的SampleData类:

 public class SampleData : CreateDatabaseIfNotExists<Context>
    {
        protected override void Seed(Context context)
        {
            base.Seed(context);


            new List<Software> {
                    new Software { Title = "Adobe Creative Suite", Version = "CS6", SerialNumber = "1234634543", Platform = "Mac", Notes = "Macs rock!", PurchaseDate = "2012-12-04", Suite = true, SubscriptionEndDate = null, SeatCount = 4, SoftwareTypes = new List<SoftwareType> { new SoftwareType { Type="Suite" }}, Locations = new List<Location> { new Location { LocationName = "Paradise" }}, Publishers = new List<SoftwarePublisher> { new SoftwarePublisher { Publisher = "Adobe" }}},
                    new Software { Title = "Apple iLife", Version = "2012", SerialNumber = "123463423453", Platform = "Mac", Notes = "Macs still rock!", PurchaseDate = "2012-11-04", Suite = true, SubscriptionEndDate = null, SeatCount = 4, SoftwareTypes = new List<SoftwareType> { new SoftwareType { Type="Suite" }}, Locations = new List<Location> { new Location { LocationName = "81st Street" }}, Publishers = new List<SoftwarePublisher> { new SoftwarePublisher { Publisher = "Apple" }}},
                    new Software { Title = "Microsoft Office", Version = "2012", SerialNumber = "12346231434543", Platform = "PC", Notes = "Macs really rock!", PurchaseDate = "2011-12-04", Suite = true, SubscriptionEndDate = null, SeatCount = 4, SoftwareTypes = new List<SoftwareType> { new SoftwareType { Type="Suite" }}, Locations = new List<Location> { new Location { LocationName = "Paradise" }}, Publishers = new List<SoftwarePublisher> { new SoftwarePublisher { Publisher = "Microsoft" }}}
                }.ForEach(s => context.Software.Add(s));


        }
    }
public类SampleData:CreateDatabaseIfNotExists
{
受保护的覆盖无效种子(上下文)
{
种子(上下文);
新名单{
新软件{Title=“Adobe Creative Suite”,Version=“CS6”,SerialNumber=“1234634543”,Platform=“Mac”,Notes=“Macs rock!”,PurchaseDate=“2012-12-04”,Suite=true,SubscriptionEndDate=null,SeatCount=4,SoftwareTypes=new List{new SoftwareType{Type=“Suite”},Locations=new List{new Location{LocationName=“Paradise},Publisher=new List{new SoftwarePublisher{Publisher=“Adobe”}},
新软件{Title=“Apple iLife”,Version=“2012”,SerialNumber=“123463423453”,Platform=“Mac”,Notes=“Macs still rock!”,PurchaseDate=“2012-11-04”,Suite=true,SubscriptionEndDate=null,SeatCount=4,SoftwareTypes=new List{new SoftwareType{Type=“Suite”},LocationName=new List{new Location{LocationName=“81街”}},Publisher=new List{new SoftwarePublisher{Publisher=“Apple”}}},
新软件{Title=“Microsoft Office”,Version=“2012”,SerialNumber=“12346231434543”,Platform=“PC”,Notes=“Macs really rock!”,PurchaseDate=“2011-12-04”,Suite=true,SubscriptionEndDate=null,SeatCount=4,SoftwareTypes=new List{new SoftwareType{Type=“Suite”},LocationName=new List{new Location{LocationName=“Paradise”},Publisher=new List{new SoftwarePublisher{Publisher=“Microsoft”}}
}.ForEach(s=>context.Software.Add);
}
}

我编译时没有错误。我只是没有数据库。我查看了我的应用程序数据,所有的数据都是默认数据库。我有一个被调用的dbContext,因为当我有错误时,它们指向该文件。我是否需要某种创建方法,在站点首次编译时调用它?

SetInitializer only设置初始值设定项策略,该策略在您第一次访问数据库时执行。请在调用SetInitializer后尝试添加以下内容

using (var context = new Context()) { context.Database.Initialize(true); }

不。那没有。它不应该在我的web.config中创建一个连接字符串吗?如果您没有在web.config中指定默认的连接工厂,代码首先使用指向。\SQLEXPRESS。所以请查看您的。\SQLEXPRESS实例。SetInitializer只设置初始值设定策略,并且第一次执行该策略您可以访问数据库。请尝试在调用SetInitializer
后使用(var context=new context()){context.database.Initialize(true);}添加以下内容
我在SetInitializer调用后将其放入我的应用程序\u start中,并出现以下错误:错误1“System.Web.HttpApplication.Context”是一个“属性”,但其使用方式类似于“type”D:\webs\CIT\CIT\Global.asax.cs 21 38 CITNamespace问题。已修复该问题。