Развертывание первых приложений EF Code в производственной базе данных - PullRequest
5 голосов
/ 11 марта 2012

Я написал простое приложение .net mvc 3 на VS2010, используя кодовый подход для генерации схемы.Когда я развернул его на общем производственном сервере, я получил следующую ошибку: [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; }
}
}

вот мой код контроллера:

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

    }

и вот моя строка подключения для производственной базы данных

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

Я новичок в asp.net mvc - пожалуйста, сообщите мне, какЗапустите мое приложение на производственной базе данных, где я не могу запустить создание или удаление sql.

Спасибо!

Ответы [ 3 ]

5 голосов
/ 11 марта 2012

В общей среде я считаю правильным, чтобы каждое приложение имело доступ только к своей собственной базе данных и не могло создавать базу данных.Проконсультируйтесь с поставщиком общей среды о том, как правильно настроить и запустить новую базу данных.Простой способ получить правильную инициализацию - отправить резервную копию базы данных администратору сервера и попросить восстановить ее.

EF Code First / Перенос можно выполнить без автоматического создания или автоматического-Миграция баз данных при запуске в производственной среде с помощью пользовательской стратегии инициализатора БД .

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.");
      }
    }
  }
}

Включите его статическим конструктором в вашем DbContext:

static MyDbContext()
{
    Database.SetInitializer(new ValidateDatabase<CarsContext>());
}
2 голосов
/ 06 мая 2014

У вас нет прав администратора в пространстве сервера SQL вашей хостинговой компании.Самая причина, по которой вы можете сбросить, но потерпите неудачу, когда EF попытается выполнить шаг CREATE DATABASE.Инициализация базы данных лучше всего не выполнять в производственных приложениях.

  1. Если у вас есть доступ к dev-серверу на полномасштабном сервере SQL Server (не экспресс), и вы сделали это.Просто создайте резервную копию, загрузите ее и восстановите на своем хостинге пространство сервера SQL.

  2. Если вы использовали SQLExpress, вы должны сгенерировать сценарий SQL для каждого объекта в ваших данных и запустить его.на хостинге SQL сервера.По желанию, если вы можете воссоздать базу данных на полномасштабном SQL Server, что избавит вас от необходимости создавать и выполнять сценарии.

  3. Закомментируйте части кода для инициализации базы данных.

  4. Разверните свой исходный код на своем хостинговом пространстве.
  5. Измените строку подключения, указав копию базы данных на SQL-сервере вашего хостинга.
  6. Молитесь, чтобы все прошло гладко.:) Если нет, то подумайте, что, запустив приложение, вы просто заработали себе белый пояс на развертывании проекта WebAPI / EF.
1 голос
/ 11 марта 2012

Проблема здесь не обязательно заключается в вашем коде.

В базе данных 'master' отказано в разрешении CREATE DATABASE

Приведенное выше сообщение об ошибке указывает на то, что проблема заключается в подключении к базе данных с учетными данными, которые не позволяют создавать новые элементы. Попробуйте изменить учетные данные для первоначального создания или обновить возможности учетной записи, к которой вы подключаетесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...