当前位置: 首页 > 知识库问答 >
问题:

带有实体框架的Azure Api/Web应用-SQL数据库连接字符串

阙辰龙
2023-03-14

我正在给我的Azure API应用程序添加一个SQL数据库。我有一个空的SQL数据库,我通过portal.azure.com单独创建。我的问题是我不知道如何设置连接字符串,以便我的应用程序使用Azure数据库。

我已经阅读了代码优先迁移的文章,但仍停留在部署阶段。我无法在项目中的任何文件中看到任何连接配置。

如何将连接字符串设置为在 Azure 中部署应用时使用?

更多信息:

准确地说,我可以看到两件事:

>

  • 注释掉了Web.Debug/Release中的ConnectionString部分。配置文件
  • Web.Config中的一些EF配置:

       <entityFramework>
            <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
              <parameters>
                <parameter value="mssqllocaldb" />
              </parameters>
            </defaultConnectionFactory>
           (...)
    

    当我在本地执行测试时,我可以看到Database.Connection.ConnectionString

    Data Source=(localdb)\mssqllocaldb;Initial Catalog=XDataAPI.Models.MyContext;Integrated Security=True;MultipleActiveResultSets=True
    

    顺便说一句。“发布”窗口显示在项目中没有找到数据库。(这个其实并不困扰我,是次要问题)

    编辑:

    DbContext,按要求:

    public class MyAppContext : DbContext 
        { 
            public DbSet<Organisation> Organisations { get; set; } 
        }
    
  • 共有3个答案

    权承
    2023-03-14

    您应该能够在web.config中更新数据上下文的连接字符串以使用AzureSQL数据库。对于我的测试项目,它位于web.config顶部:

    <configuration>
      <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=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
      </configSections>
      <connectionStrings>
        <add name="WebApplication4Context" connectionString="Server=tcp:test.database.windows.net,1433;Database=testdb;User ID=test@test;Password=p4ssw0rd!;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
          providerName="System.Data.SqlClient" />
      </connectionStrings>
    ....
    <configuration>
    

    不要忘记更新AzureSQL数据库服务器的防火墙设置,使其可供应用程序访问。

    云浩然
    2023-03-14

    如果设置了 SQL 服务器 VM,则

    <add name="DataContext" connectionString="Data Source=VMname.cloudapp.net; Initial Catalog=catalog; User ID=login;Password=password; MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />
    

    如果设置了 SQL Azure,则应使用该教程。

    关于连接字符串位置,请参阅一些文档。使用LocalDB,而不是使用SQL Server。

    曹伟泽
    2023-03-14

    将连接名称作为参数传递给构造函数,然后在 web.config 中设置连接字符串时使用相同的连接名称,如下所示:

    public class MyAppContext : DbContext 
    { 
        public MyAppContext():base("MyConnectionName"){}
        public DbSet<Organisation> Organisations { get; set; } 
    }
    

    然后,在网络配置中:

    <configuration>
      <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=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
      </configSections>
      <connectionStrings>
        <add name="MyConnectionName" connectionString="Server=tcp:test.database.windows.net,1433;Database=testdb;User ID=test@test;Password=p4ssw0rd!;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
          providerName="System.Data.SqlClient" />
      </connectionStrings>
    ....
    <configuration>
    

    如果要从本地计算机上运行,请记住,您需要在Azure数据库服务器防火墙上允许来自IP的传入连接。

     类似资料:
    • 我曾想过简单地对数据库运行一个小命令并捕获任何异常,然而,如果出现问题(例如app.config丢失或数据库服务器关闭),应用程序将花费大量时间运行此代码,然后抛出异常(大约1分钟)。我想这是由于连接超时等,但我已经摆弄了这样的属性没有任何作用。 有没有人能提供任何关于去哪里的建议?

    • 问题内容: 我希望将动态连接字符串传递给实体框架上下文。我有150多个相同的模式(每个帐户一个),我想这样选择连接: 从理论上讲,这很容易,因为我可以创建一个connectionString并将其作为构造函数的参数传递,例如: 仅传递连接字符串名称时,我可以成功连接,但如下所示动态生成时,则不能成功。我现在意识到这是因为web.config中的连接字符串具有属性。 但是,当我将实际的连接字符串动态

    • 我必须将昨天添加的一位同事的迁移应用到我的本地数据库: 问题是我的表中已经有数据并且迁移失败: 有什么方法可以避免这种冲突,而不必清除< code>Document表中的所有数据?

    • 我正在尝试使用Hibernate5连接到SQL Server2012数据库。我使用以下连接字符串连接到数据库 jdbc:sqlserver://server;instanceName=instance;databaseName=database;integratedsecurity=true jdbc:sqlserver://server;instanceName=instance;databas

    • 我的web api项目有用于检索密钥库机密的nuget包。因此,在我的global.asax文件中,我有以下内容: 我发表了这篇文章,它起作用了,但它“感觉”不对。 另一个选择是遵循本文https://blog.falafel.com/keeping-secrets-with-azure-key-vault/的内容,但这需要我将KeyVault API包与数据访问耦合起来。

    • 我试图使用Azure Key Vault来存储实体框架的web api连接字符串。理想情况下,我希望避免将key vault nuget包与我的数据访问代码耦合。我的dbContext类有两个构造函数: 我的代码使用了从web配置中获取连接字符串的无参数构造函数。我在某些地方实例化了一个新的MyDbContext对象,这禁止了使用注入的解决方案。 我采用的路线是在我的dbcontext上设置一个带