繁体   English   中英

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

[英]MVC4 EF code first database initialization incomplete in production

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

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

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

本地数据库

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

生产数据库

这是在我尝试这个之后在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; }
    [***]
}

要验证的项目列表:

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

  3. 在create database调用周围添加一个try catch

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

EntityFramework 6.0 CreateDatabaseIfNotExists代码首先创建数据库

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM