3

我正在尝试 90 天免费试用 azure。部署/发布网站和创建数据库非常容易,但由于某种原因,我的表没有在数据库中创建。我正在使用实体框架 4.4(我相信)和代码优先迁移。我读过 azure 使用它自己的连接字符串,但我继续更改了我的连接字符串。我花了几个小时在这上面,我不知道出了什么问题以及为什么我的表没有被创建。我部署网站、启用迁移、添加迁移、更新数据库,然后通过选中代码优先复选框进行发布。也许我的连接字符串是错误的?任何帮助是极大的赞赏。

在“MyProject.Web”web.config 中:

<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />

<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=tcp:n98my***.database.windows.net,1433;Initial Catalog=slutips_db;User Id=****;Password=****;" />
</connectionStrings>

然后在 'MyProject.Data' app.config 中,我的 datacontext.cs 保存在其中:

<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<contexts>
  <context type="SeluCmpsTutorials.Data.DataContext">
    <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion">
      <parameters>
        <parameter value="slutips_db"/>
      </parameters>
    </databaseInitializer>
  </context>
</contexts>
</entityFramework>
  • 我还注意到,即使我的所有连接字符串都已更改,当我添加迁移和更新数据库时,它仍然使用 ./sqlexpress 本地数据库,这怎么可能?
4

7 回答 7

3

关于 sql azure 连接要注意的关键问题:对于用户 ID,它实际上通常需要是用户 ID @服务器名称 - 会在连接字符串中读取 youruserid@n98my***。

另外,不确定您是否需要“tcp:”(不使用它),您可能还想添加 providerName="System.Data.SqlClient"

于 2012-10-18T18:05:59.823 回答
2

您的 db 用户是否有必要的数据库修改权限?你是如何设置你的用户的?

最初,您应该为 Azure sql 服务器创建登录名,如下所示:(在服务器主数据库上执行以下 sql,将尖括号值替换为实际值)

CREATE LOGIN [<SomeServerLogin>] WITH PASSWORD=N'<somepassword>'

然后以管理员身份连接到您的 slutips_db 数据库并执行以下 sql

CREATE USER [<slutips_db_user>] FROM LOGIN [<SomeServerLogin>];
GO;
EXEC sp_addrolemember 'dbmanager', '<slutips_db_user>';
GO;
EXEC sp_addrolemember 'loginmanager', '<slutips_db_user>';
GO;

'dbmanager' 角色允许创建表\管理。

'loginmanager' 角色允许在当前数据库中创建另一个用户(您的 slutips_db_user 将被允许执行CREATE USER <slutips_db_user1> FROM LOGIN <SomeServerLogin1>子句

Edit1:另外-确保您的连接字符串用户具有 user@n98my*** (user@server) 格式。

于 2012-10-17T07:32:52.357 回答
0

如果您遵循本教程: https ://www.windowsazure.com/en-us/develop/net/tutorials/web-site-with-sql-database/它将向您展示如何连接 Visual Studio(2012 年例如,不确定是否适用于其他任何人)与 Azure - 基本上你想登录到门户,并下载发布凭据。这将包含您的数据库连接字符串,然后您可以使用该字符串将代码优先迁移推送到 Azure。

您所做的看起来像是手动将属性添加到 app.config 中。发布的工作方式,它在您的 .config 文件中定义一个本地版本,如下所示:

<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
  <parameters>
    <parameter value="v11.0" />
  </parameters>
</defaultConnectionFactory>

然后,当你发布时,VS 会自动将所需的东西插入到你的 .config 中——如果我去 FTP 到我的网站并查看生成的 .config 文件,你会看到:

<contexts>
  <context type="Web_App.Models.TrackSafeDb, Web App">
    <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[Web_App.Models.TrackSafeDb, Web App], [Web_App.Migrations.Configuration, Web App]], EntityFramework, PublicKeyToken=*******************">
      <parameters>
        <parameter value="Web_App.Models.TrackSafeDb_DatabasePublish" />
      </parameters>
    </databaseInitializer>
  </context>
</contexts>

所以我会尝试从你的本地 app.config 中删除无关的东西并重新发布

于 2012-11-14T04:40:05.703 回答
0

尝试将加密添加到您的连接字符串...

<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=tcp:n98my***.database.windows.net,1433;Initial Catalog=slutips_db;User Id=****;Password=****;Integrated Security=False;Persist Security Info=True;Encrypt=True" />
</connectionStrings>
于 2013-11-13T23:51:45.303 回答
0

我所做的是转到我的 azure 管理门户。点击数据库。查看连接字符串,然后将它们直接复制到我的相关配置中。在我的情况下,它的“发布”配置。

确保启用 Web 配置转换并正常工作。

还要确保您已启用对每个数据库的防火墙访问...您必须单击“启用通过防火墙连接”或类似的东西。它在门户网站的 db 选项中。

于 2013-11-20T14:01:29.380 回答
0

看了几天这个问题,有几个想法。首先,您的上下文名称实际上是 DefaultConnection。实体框架(为了与无参数构造函数一起使用)喜欢连接字符串名称以匹配上下文的名称。

例如,如果您这样声明一个新的上下文变量:

var context = new MyEntities();

那么你的连接字符串应该被调用MyEntities

<connectionStrings>
<add name="MyEntities" connectionString="Data Source=tcp:n98my***.database.windows.net,1433;Initial Catalog=slutips_db;User Id=****;Password=****;" />
</connectionStrings>

其次,您是否 100% 确定没有 web.config 转换文件和/或您还正确更新了这些文件中的连接字符串?

第三,请记住,在部署时,除了 web.config 之外的任何配置文件都会被忽略。执行程序集是 Web 应用程序,而不是数据项目或任何其他项目。与 EF 设置和部署相关的任何配置都应位于 web.config 文件中(如您在数据 app.config 中的片段)

于 2013-11-20T18:33:21.820 回答
0

我遇到了完全相同的问题,它与我的包含“%”字符的密码相关联。我检查了 Azure 上与 ftp 连接的结果 web.config,我的密码部分包含“95%a”变成了“95ª”……自动。这可能是 azure 的 Web 部署功能中的一个错误,因为我在本地发布配置文件中的密码是正确的。

如果生成的数据库密码确实在生成的连接字符串中损坏,则必须重置它:

  • 在 Windows Azure 管理中,在 SQL DATABASES 选项卡中,选择 SERVERS 列表(不是 DATABASE 列表)并单击您的服务器
  • 在仪表板中,有一个重置管理员密码的链接
  • 在 Visual Studio 中,更新发布配置文件的 connectionString(设置、数据库)中的密码
  • 对 web.config 进行更改(真实的,不是评论),否则将不会重新发布
  • 发布,并在第一次使用数据库时,将应用迁移
于 2013-12-29T12:02:39.510 回答