2013-12-23 4 views
2

Вероятно, простой вопрос, но мне трудно найти ответ на мою ситуацию.Правильный формат поставщика для строки подключения

MVC 4, C# приложение с помощью Visual Studio Express 2012

Я следовал этому tutorial и пытаюсь переключить строки соединения из локальной базы данных (работа) в базу данных MS SQL размещаемой на линии (1and1 сервер).

Информационный связь обеспечивается интернет провайдера:

Provider=sqloledb;Data Source=db501044113.db.1and1.com,1433;Initial Catalog=db501044113;User Id=dbo501044113;Password=*****; 

Моя строка соединения заключается в следующем:

<add name="RCDBContext" 
    connectionString="Data Source=db501044113.db.1and1.com,1433;Initial Catalog=db501044113;User Id=dbo501044113;Password=*****" 
    providerName="System.Data.SqlClient" 
/> 

Когда я загружаю мою страницу, я встретился с недопущенный ошибки доступа: CREATE DATABASE permission denied in database 'master'.

Почему он пытается создать существующую базу данных?

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

Нужно ли мне изменять разрешения на стороне сервера или не работает мое приложение?

Возможно, что-то связано с Entity Framework и кодом в первую очередь?

Я попытался использовать Provider=sqloledb в строке подключения, но получил другую ошибку. Должен ли я использовать что-то другое, кроме providerName="System.Data.SqlClient" с этим типом провайдера?

ответ

0

Мое решение в конечном итоге быть немного другой тип инициализатора. Вместо установки одного из трех вариантов:

  • CreateDatabaseIfNotExists
  • DropCreateDatabaseAlways
  • DropCreateDatabaseIfModelChanges

Я просто установить его null так:

Database.SetInitializer<RCDBContext>(null); 

Кроме того, для тех, кто задаются вопросом, куда положить этот код, добавить его в свой Global.asax файл внутри метода Application_Start().

Например, это то, что мое выглядит следующим образом:

protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 

     WebApiConfig.Register(GlobalConfiguration.Configuration); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 
     AuthConfig.RegisterAuth(); 

     Database.SetInitializer<RCDBContext>(null); 
    } 
1

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

Entity Framework 4 Code First - Prevent DB Drop/Create

System.Data.Entity.Database.SetInitializer(new CreateDatabaseIfNotExists<SampleContext>()); 
+0

Спасибо за комментарий.Я немного прочитал об этом и, похоже, код должен находиться в 'Application_Start()'. Это все равно попытается создать новый, если он не найден, что может быть моей проблемой, поскольку я все равно получаю ту же ошибку. Любые другие предложения? –

Смежные вопросы