2013-12-23 49 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()'中。如果找不到这可能是我的问题,这仍然会尝试创建一个新的问题,因为我仍然得到相同的错误。还有其他建议吗? –