首先附加现有数据库实体框架代码时出错

时间:2016-02-27 08:36:50

标签: c# asp.net sql-server entity-framework ef-code-first

我已经在ASP.NET MVC 5中使用Entity Framework 6代码优先创建了一个应用程序,并且正在将bin部署到我的服务器。除了涉及数据库使用的操作/控制器操作外,一切正常。

我将曾经生成的数据库文件从我的计算机上传到服务器的App_Data文件夹。

部署后,我更改了web.config文件中的连接字符串:

connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-NERC_Main-20160104065223.mdf;Initial Catalog=aspnet-NERC_Main-20160104065223;Integrated Security=True"

connectionString="Data Source=.;AttachDbFilename=|DataDirectory|\aspnet-NERC_Main-20160104065223.mdf;Initial Catalog=aspnet-NERC_Main-20160104065223;Database=aspnet-NERC_Main-20160104065223.mdf;Trusted_Connection=Yes;Integrated Security=True;"

会抛出错误

  

在数据库' master'。

中拒绝CREATE DATABASE权限

可能的原因是因为没有附加当前数据库文件,并且实体框架正试图在其他受限制的目录中生成新数据库。

我读到AttachDbFileName仅对SQL Server Express实例有效,在我的情况下并不存在。

如何修改连接字符串,以便使用当前已上载的数据库。

注意:

远程服务器具有SQL Server 2008 R2的完整安装。服务器不支持用户实例。我的数据库没有密码保护,因此我将Integrated Security属性值设置为True。如果需要,我会提供任何其他信息。

1 个答案:

答案 0 :(得分:0)

如果您拥有完整版的SQL Server,则不能只使用AttachDbFileName。相反,您需要将.mdf(和.ldf)复制到SQL Server数据文件位置,然后您需要将SQL Server Management Studio中的数据库附加到服务器实例。

从那时起,您可以使用服务器名称和逻辑数据库名称在连接字符串中引用该数据库 - 如下所示:

Server=.;Database=aspnet-NERC_Main-20160104065223;Integrated Security=True;

根据您的数据库设置,您可能会或可能无法使用Integrated Security - 也许您需要具有特定的SQL Server登录并在您的指定中指定该登录(及其密码)改为连接字符串:

Server=.;Database=aspnet-NERC_Main-20160104065223;User ID=YourUserName;Password=YourPassword

有关如何为SQL Server构建有效连接字符串的大量示例,请参阅this site here