web.config中的EF 4.1代码优先连接字符串

时间:2011-07-26 15:27:15

标签: .net asp.net-mvc entity-framework-4 ef-code-first

今天我有一个噩梦般的日子。我已经成功地在本地进行了代码优先开发,并且一切都很顺利,我的数据库被删除并在模型更改时根据需要重新创建。但是,在尝试将项目“升级”到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"/>

这不起作用,并且错误地说关键字'server'无法识别。经过大量的谷歌搜索,似乎问题很可能与providerName="System.Data.SqlClient"部分有关。

所以在将此更改为providerName="System.Data.EntityClient"时,我充满了希望。唉,同样的故事。

为了缩短(非常)冗长的故事,我尝试了许多排列(突变是操作词!! :)但似乎无法达到代码优先ef连接字符串要求的正确语法要求。

最近有没有人去过类似的箍,发现了一个有效的解决方案?

手指,脚趾和眼睛xx'd ..

[更新] 我设法通过格式化将连接字符串设置为(ALMOST),如下所示:

<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选择时停止并调试控制器操作。但是,在尝试返回行时,我现在收到一个异常,指出:触发器返回结果集,服务器选项'禁止触发器的结果'为真

那么,这里拼图的最后一部分是连接字符串中的另一个选项来否定这个问题吗?

[更新2] 哈利卢拉 - 我已经破解了坚果。正如我已经删除了global.asax行:

Database.SetInitializer(new System.Data.Entity.DropCreateDatabaseIfModelChanges<MyWebSiteContext>());

我没有意识到我需要在Database.SetInitializer()中包含空引用。

瞧,以下是我的问题:

Database.SetInitializer<MyWebSiteContext>(null);
谢谢大家的各种建议,他们帮助我专注于这个问题。太开心了:))

3 个答案:

答案 0 :(得分:2)

您是否尝试过数据源和初始目录?

sqlConnectionString="data source=myServer.myDomain.com;initial catalog=mydbName;user id=myUid;password=myPwd"

答案 1 :(得分:2)

数据库服务器和Web服务器是否在同一环境中?您尝试过Server=localhost;而不是Server=esql2k123.discountasp.net;吗?

或者,您是否可以找到数据库服务器与Web服务器所在的IP地址?

答案 2 :(得分:2)

所以,从本质上讲,我的问题的答案是双重的:

  1. 连接字符串需要沿着(仅粘贴连接字符串信息,所有其他内容保持与上面相同):

    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”

  2. global.asax Application_Start(或我的应用程序的情况,ninject OnApplicationStarted())需要有一个空Database.SetInitializer<>()函数来清除现有的:

  3. Database.SetInitializer(new System.Data.Entity.DropCreateDatabaseIfModelChanges<MyWebSiteContext>());

    引起了一个问题。用Database.SetInitializer<MyWebSiteContext>(null);

    替换它

    解决了批发问题。

    感谢您分享旅程和您的想法,希望这将成为其他任何有类似问题的人的起点。