MVC4 EF代码第一次数据库初始化在生产中不完整
问题描述:
我创建了一个使用MVC4的网站,并且我更新了框架到4.5.1。MVC4 EF代码第一次数据库初始化在生产中不完整
一切都在开发阶段完美运作。我首先启用了实体框架代码的迁移,并创建了一个迁移“Init”。
我有简单的会员资格。当我放弃我的本地数据库并启动应用程序时,我完全创建了所有表。
然而,当我在生产服务器上部署(FTP),我只有表的子集。
这就是在Global.asax.cs中我试图this
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应用程序。但这是我第一次部署一个更新到.net 4.5.1的MVC4应用程序(我不知道这是否有帮助)。
有什么想法?
编辑(添加的DbContext样品)
公共类GlobalDbContext:的DbContext { 公共GlobalDbContext() :基部( “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; }
[***]
}
答
项目,验证的列表:
- 4.5.1是否安装在生产服务器上
生产服务器上的sql server的权限是否相同?
添加一个尝试捕捉周围创建数据库调用
见进行数据迁移的其他问题如下
EntityFramework 6.0 CreateDatabaseIfNotExists Code first to create database
答
确保帐户应用程序用于登录到SQL服务器具有在数据库服务器上创建对象所需的权限。
你可以发布你的'DbContext'类的样本吗?很可能您的'DbContext'正在使用不同的连接字符串,因此不会为您的实体类创建表,即使成员资格提供程序能够创建它的表。 – Claies 2014-09-04 04:57:33
您正在使用'CreateDatabaseIfNotExists'策略,那么您是否将数据库放在Prod中?如果没有,这将不会做任何事情。您需要使用“DropCreateDatabaseIfModelChanges”或“DropCreateDatabaseAlways”或您自己的自定义数据库初始值设定项。通常在PROD中,您不想丢弃数据库,因为您将丢失现有数据,因此您需要使用自定义初始化程序。在本地,丢弃/重新创建不是问题。 – Mrchief 2014-09-05 19:19:54