可能是一个简单的问题,但我很难找到适合我情况的答案。
使用Visual Studio Express 2012的MVC 4,C#应用程序
我遵循了这个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 :(得分:1)
问题不在于您的Connectionstring,而是您尝试重新生成数据库的代码。
Entity Framework 4 Code First - Prevent DB Drop/Create
System.Data.Entity.Database.SetInitializer(new CreateDatabaseIfNotExists<SampleContext>());
答案 1 :(得分:0)
我的解决方案最终成为一种不同类型的初始化程序。而是设置三个选项之一:
我只是将它设置为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);
}