2013-12-23 47 views
2

可能是一個簡單的問題,但很難讓我找到適合自己情況的答案。連接字符串的正確提供程序格式

MVC 4,使用Visual Studio C#應用程序表現2012

我跟着這個tutorial,我試圖切換從本地數據庫連接字符串託管上線(的1and1服務器)(作品)到MS SQL數據庫。

由在線提供商提供的連接信息是:

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答案都是關於服務器端權限的。由於我的數據庫由第三方託管,因此我無權訪問這些權限。似乎我不需要它,因爲這是一項常用的服務。

我真的需要更改服務器端權限,還是我的應用程序有問題?

也許與實體框架和代碼有關嗎?

我試圖在連接字符串中使用Provider=sqloledb,但得到了不同的錯誤。我是否應該使用providerName="System.Data.SqlClient"以外的其他提供者?

回答

0

我的解決方案最終被一點點不同類型初始化的。相反設置的三個選項之一:

  • CreateDatabaseIfNotExists
  • DropCreateDatabaseAlways
  • DropCreateDatabaseIfModelChanges

我只是將它設置爲null這樣的:

Database.SetInitializer<RCDBContext>(null); 

此外,對於那些誰很奇怪把這段代碼放在哪裏,把它加到你的Application_Start()方法中的Global.asax文件。

例如,這是我的樣子:

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

問題不在於您的Connections字符串,而在於您的代碼嘗試重新生成數據庫。

Entity Framework 4 Code First - Prevent DB Drop/Create

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

感謝您的評論。我讀了一些關於這個,看起來代碼應該在'Application_Start()'中。如果找不到這可能是我的問題,這仍然會嘗試創建一個新的問題,因爲我仍然得到相同的錯誤。還有其他建議嗎? –