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

use*_*952 5 .net c# entity-framework 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<MenuItem> MenuItems { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)

这是我的控制器代码:

 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);

    }
Run Code Online (Sandbox Code Playgroud)

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

 <connectionStrings>
  <add name="MenuItemDBContext" 
     connectionString="Data Source=localhost\sqlexpress;Initial Catalog=ptafhksz_bonappetit;User ID=ptafhksz_jalal;Password=345d654654Dfdgdfg" 
     providerName="System.Data.SqlClient" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

And*_*bel 5

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

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

public class ValidateDatabase<TContext> : IDatabaseInitializer<TContext>
  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.");
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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

static MyDbContext()
{
    Database.SetInitializer(new ValidateDatabase<CarsContext>());
}
Run Code Online (Sandbox Code Playgroud)


Jar*_*Par 1

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

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

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