MVC4 EF代码首先在生产中初始化数据库初始化

时间:2014-08-29 07:44:45

标签: c# asp.net asp.net-mvc entity-framework asp.net-mvc-4

我使用MVC4创建了一个网站,并将框架更新为4.5.1。

在开发阶段,一切都很完美。我首先使用实体​​框架代码启用了迁移,并创建了一个迁移“Init”。

我的会员资格很简单。当我删除本地数据库并启动应用程序时,我完全创建了所有表。

Local database

但是,当我在生产服务器上部署(FTP)时,我只有一个表的子集。

Production database

这是我尝试this

后在Global.asax.cs中所做的
internal void Application_Start()
        {
            MvcHandler.DisableMvcResponseHeader = true;
            Database.SetInitializer(
                new MigrateDatabaseToLatestVersion<GlobalDbContext, Migrations.Configuration>("DefaultConnection"));
            AreaRegistration.RegisterAllAreas();

            GlobalConfiguration.Configure(WebApiConfig.Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            AuthConfig.RegisterAuth();

            using (var context = new GlobalDbContext())
            {
                if (!context.Database.Exists())
                {
                    // Register the SimpleMembership database without Entity Framework migration schema
                    //((IObjectContextAdapter)context).ObjectContext.CreateDatabase();
                    context.Database.Create();
                }
                ////context.Database.Initialize(true);
                //context.Database.Delete();
                //context.Database.Create();

            }
            WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "Username", autoCreateTables: true);
        }

显然,context.Database.Create();在生产中表现不同。

我已经部署了完整的MVC4应用程序和完整的MVC5应用程序。但这是我第一次将MVC4应用程序部署到.net 4.5.1(我不知道是否有帮助)。

有什么想法吗?

编辑(添加DbContext示例)

public class GlobalDbContext:DbContext     {         public GlobalDbContext()             :base(“DefaultConnection”)         {}

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        Database.SetInitializer<GlobalDbContext>
        (
            new CreateDatabaseIfNotExists<GlobalDbContext>()
        );
        //using model builder here
        base.OnModelCreating(modelBuilder);

    }

    public DbSet<Patient> dbSet1 { get; set; }
    [***]
}

2 个答案:

答案 0 :(得分:2)

要验证的项目列表:

  1. 生产服务器上安装了4.5.1
  2. 生产服务器上的sql server的权限是否相同?

  3. 在创建数据库调用

  4. 周围添加try catch

    有关迁移的其他问题,请参阅以下内容

    EntityFramework 6.0 CreateDatabaseIfNotExists Code first to create database

答案 1 :(得分:0)

确保应用程序用于登录SQL Server的帐户具有在数据库服务器上创建对象所需的权限。