Sql server 有没有一种推荐的方法可以先用代码在共享主机上为数据库种子
每次我将MVC站点部署到一个活动主机(通常是共享主机)上时,我都会在最初为数据库播种时遇到很多麻烦 我一直在尝试各种各样的东西,最终都能奏效,但花几个小时的反复试验并不罕见 我在共享主机上创建数据库。然后我用Sql server 有没有一种推荐的方法可以先用代码在共享主机上为数据库种子,sql-server,asp.net-mvc,shared-hosting,seeding,Sql Server,Asp.net Mvc,Shared Hosting,Seeding,每次我将MVC站点部署到一个活动主机(通常是共享主机)上时,我都会在最初为数据库播种时遇到很多麻烦 我一直在尝试各种各样的东西,最终都能奏效,但花几个小时的反复试验并不罕见 我在共享主机上创建数据库。然后我用CreateDatabaseIfNotExists启动应用程序。它经常会给我一个无休止的“加载”页面 我可能会再次运行该应用程序,也许它已经创建了DB表,但没有填充任何DB表 使用任何DropCreateDatabase选项都不起作用-它没有权限(可能是因为在共享主机上) 冲洗,起泡,重复,
CreateDatabaseIfNotExists
启动应用程序。它经常会给我一个无休止的“加载”页面
我可能会再次运行该应用程序,也许它已经创建了DB表,但没有填充任何DB表
使用任何DropCreateDatabase
选项都不起作用-它没有权限(可能是因为在共享主机上)
冲洗,起泡,重复,直到最后看起来有效
是否有推荐的方法在共享主机上创建数据库并为其种子?你有什么建议可以让这项工作更容易些吗
更新
在Gobal.asax中:
Database.SetInitializer<ApplicationDbContext>(new ApplicationDbInitializer());
Database.SetInitializer(新的ApplicationBinInitializer());
在初始值设定项中:
public class ApplicationDbInitializer : CreateDatabaseIfNotExists<ApplicationDbContext>
{
protected override void Seed(ApplicationDbContext db)
{
var dataSeeder = new DataSeeder(db);
dataSeeder.SeedAll();
base.Seed(db);
}
}
公共类ApplicationBinInitializer:CreateDatabaseIfNotExists
{
受保护的覆盖无效种子(ApplicationDbContext db)
{
var数据种子=新数据种子(db);
dataSeeder.SeedAll();
基部种子(db);
}
}
种子设定只是标准代码,比如:
db.Objects.AddRange(List)
显示一些代码,特别是定义数据库初始值设定项的代码和调用Seed()方法的代码。我认为代码还可以(著名的最后一句话)。在开发过程中一切都很好,只是当我在共享主机上将DB切换到一个时,我遇到了麻烦。这可能有点不了解我,但这听起来更像是主机的连接问题。我想不出为什么在主机上播种和在本地播种在.NET级别上会有什么不同……除非这个故事还有更多。当你说它最终会起作用时,是不是采取了一些一致性的步骤使它最终起作用?是的,我原以为它会是一样的。我试过几个不同的主机,总是有类似的问题。这就是为什么我想知道我是否遗漏了什么,或者做错了什么。当它最终工作时,它使用一个新创建的DB并使用CreateIfNotExists
选项。(但我不明白为什么第一次设置不起作用)。通常需要2到3次才能起作用。