【发布时间】:2011-07-26 15:27:14
【问题描述】:
我今天有点噩梦般的一天。我一直在本地成功地进行代码优先开发,并且在模型更改时,我的数据库被删除并根据需要重新创建,一切都进行得很好。但是,在尝试将项目“升级”到 mydiscountasp.net 上的 sqlserver2008 登台服务器时,我的问题就真正开始了。由于用户无法删除/重新创建共享主机数据库,因此我进行了本地备份并将其还原到服务器上。更近一步..当我通过 sqlserver mgt studio 登录服务器时,我可以看到数据库,一切看起来都很好。但是,我似乎无法弄清楚如何通过 web.config 连接到数据库。我开始使用简陋的 ado.net sysntax 作为连接字符串,如下所示:
<add name="MyWebSiteContext"
connectionString="Server=esql2k123.discountasp.net;
Database=SQL2008R2_123456_test;uid=SQL2008R2_123456_test_user;pwd=mypassword;"
providerName="System.Data.SqlClient"/>
这不起作用,并给出了一个错误,指出无法识别关键字“服务器”。经过多次谷歌搜索,问题似乎很可能与providerName="System.Data.SqlClient" 部分有关。
所以在将其更改为providerName="System.Data.EntityClient" 时,我充满了一点希望。唉,同样的故事。
为了缩短(非常)长话短说,我尝试了许多排列(突变是有效的词!!:)),但似乎无法满足代码优先 ef 连接字符串要求的正确语法要求。
最近有没有人经历过类似的困境并找到了可行的解决方案?
手指、脚趾和眼睛 xx'd..
[更新]我已经设法让我的连接字符串(几乎)通过如下格式化:
<add name="GBCWebSiteContext"
connectionString="Data Source=esql2k123.discountasp.net;Initial Catalog=SQL2008R2_123456_test;Persist Security Info=True;MultipleActiveResultSets=True;User ID=SQL2008R2_123456_test_user;Password=mypass" providerName="System.Data.SqlClient"/>
我现在可以在控制器操作执行 linq 选择时停止和调试它。但是,在尝试返回行时,我现在收到一个异常,它指出:触发器返回了一个结果集,并且服务器选项“禁止来自触发器的结果”为 true
那么,我在这里拼图的最后一块是什么,是连接字符串中的一个附加选项来否定这个问题吗??
[更新 2] 哈利路拉——我已经搞砸了。正如我已经删除了 global.asax 行:
Database.SetInitializer(new System.Data.Entity.DropCreateDatabaseIfModelChanges<MyWebSiteContext>());
我没有意识到我需要包含对Database.SetInitializer() 的空引用。
你瞧,以下是我的问题:
Database.SetInitializer<MyWebSiteContext>(null);
感谢大家的各种建议,他们帮助我专注于这个问题。好开心:)
【问题讨论】:
-
您的本地连接字符串是什么样的?您可能会对其进行轻微修改,将其部署到暂存环境(稍后部署到生产环境)并让它再次运行。 EF 在连接字符串中需要相当多的元数据,所以我不会尝试从头开始手动编写。
-
Tomas- 本地连接字符串是基于 ef4.1 代码优先约定的连接字符串。即未在 web.config 中声明
-
在你的 SQL Server 中,你能运行这个吗?
exec sp_configure 'show advanced options',1;RECONFIGURE;exec sp_configure 'disallow results from triggers',1;RECONFIGURE;
标签: .net asp.net-mvc entity-framework-4 ef-code-first