C# MVC4 EF代码第一次数据库初始化在生产中未完成
我使用MVC4创建了一个网站,并将框架更新为4.5.1 在开发阶段,一切都很完美。我首先使用实体框架代码启用了迁移,并创建了一个迁移“Init” 我有简单的会员资格。当我删除本地数据库并启动应用程序时,我已经完美地创建了所有表 但是,当我在生产服务器上部署(FTP)时,我只有一部分表 这是我尝试后在Global.asax.cs中所做的C# MVC4 EF代码第一次数据库初始化在生产中未完成,c#,asp.net,asp.net-mvc,entity-framework,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Entity Framework,Asp.net Mvc 4,我使用MVC4创建了一个网站,并将框架更新为4.5.1 在开发阶段,一切都很完美。我首先使用实体框架代码启用了迁移,并创建了一个迁移“Init” 我有简单的会员资格。当我删除本地数据库并启动应用程序时,我已经完美地创建了所有表 但是,当我在生产服务器上部署(FTP)时,我只有一部分表 这是我尝试后在Global.asax.cs中所做的 要验证的项目列表: 是否在生产服务器上安装了4.5.1 sql server在生产服务器上的权限是否相同 围绕create database调用添加一个try
要验证的项目列表:
确保应用程序用于登录SQL Server的帐户具有在数据库服务器上创建对象所需的权限。能否发布
DbContext
类的示例?很可能您的DbContext
使用了不同的连接字符串,因此没有为实体类创建表,甚至成员资格提供程序也可以创建它的表。您使用的是CreateDatabaseIfNotExists
策略,那么您是否要在Prod中删除数据库?如果没有,这将不会起任何作用。您需要使用DropCreateDatabaseIfModelChanges
或DropCreateDatabaseAlways
或您自己的自定义DB初始值设定项。通常在PROD中,您不希望删除DB,因为您将丢失现有数据,因此需要使用自定义初始值设定项。在本地,删除/重新创建不是问题。
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);
}
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; }
[***]
}