将EF Code First应用程序部署到生产数据库

我在VS2010上使用代码优先方法编写了一个简单的.net mvc 3应用程序来生成模式。 当我将它部署到共享生产服务器时,我收到以下错误:[SqlException(0x80131904):在数据库’master’中拒绝CREATE DATABASE权限。

这是我的型号代码:

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data.Entity; namespace Bonappetit.Models { public class MenuItem { public int ID { get; set; } public string Title { get; set; } public string Description { get; set; } public decimal Price { get; set; } } public class MenuItemDBContext : DbContext { public DbSet MenuItems { get; set; } } } 

这是我的控制器代码:

  namespace Bonappetit.Controllers { public class MenuItemsController : Controller { private MenuItemDBContext db = new MenuItemDBContext(); // // GET: /MenuItems/ public ViewResult Index() { return View(db.MenuItems.ToList()); } public ActionResult generateJSON() { return Json(db.MenuItems.ToList(), JsonRequestBehavior.AllowGet); } 

这是我的生产数据库的连接字符串

     

我是asp.net mvc的新手 – 请告诉我如何针对基于生产的数据库运行我的应用程序,我无法运行sql create或drop。

谢谢!

在共享环境中,我认为使每个应用程序只能访问自己的数据库并且无法创建数据库是正确的。 请与共享环境的供应商联系,了解如何启动并运行新数据库。 正确初始化它的一个简单选择是将db的备份发送给服务器的管理员,并要求恢复备份。

当通过自定义db初始化策略在生产环境中运行时,可以使EF Code First / Migrations不自动创建或自动迁移数据库。

 public class ValidateDatabase : IDatabaseInitializer where TContext : DbContext { public void InitializeDatabase(TContext context) { if (!context.Database.Exists()) { throw new ConfigurationException( "Database does not exist"); } else { if (!context.Database.CompatibleWithModel(true)) { throw new InvalidOperationException( "The database is not compatible with the entity model."); } } } } 

在DbContext中使用静态构造函数启用它:

 static MyDbContext() { Database.SetInitializer(new ValidateDatabase()); } 

您没有托管公司的SQL服务器空间的管理员权限。 您尝试CREATE DATABASE步骤时可能会丢弃但失败的原因。 数据库初始化最好不要在生产应用程序上完成。

  1. 如果您可以在完整规模的SQL Server(不是快速)上访问和完成您的开发。 只需进行备份,上传并在托管SQL服务器空间恢复。

  2. 如果您使用过SQLExpress,则必须生成数据上每个对象的SQL脚本,并在托管SQL服务器空间上运行它。 (可选)如果您可以在全面的SQL Server上重新创建数据库,那么可以节省生成和执行脚本的任务。

  3. 注释掉代码的数据库初始化部分。

  4. 将源代码部署到托管空间。
  5. 修改连接字符串以指向主机SQL服务器上的数据库副本。
  6. 祈祷一切顺利进行。 :)如果没有,请考虑一下,一旦你运行应用程序,你就可以在WebAPI / EF项目部署中获得白带。

这里的问题似乎不一定是您的代码。

数据库’master’中的CREATE DATABASE权限被拒绝

上面的错误消息表明问题是您使用无法创建新项目的凭据连接到数据库。 尝试更改初始创建的凭据或升级您要连接的帐户的function