90 votes

Chaîne de connexion à la base de données Azure Functions

Comment ajouter ou accéder à un fichier app.config aux fonctions Azure pour ajouter une chaîne de connexion à la base de données? Si vous n'êtes pas censé ajouter un fichier app.config et qu'il existe un meilleur moyen d'accéder à une base de données externe pour exécuter la fonction, faites-le moi savoir. Merci!

81voto

mynameistodd Points 61

Jan_V l'a presque cloué, ce qui m'a amené à expérimenter cela dans les local.settings.json

 {
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true;",
    "AzureWebJobsDashboard": ""
  },
  "ConnectionStrings": {
    "MyConnectionString": "[YourConnectionStringHere]"
  }
}
 

Cela vous permet d'utiliser les ConfigurationManager.ConnectionStrings[] auxquels nous sommes tous habitués.

 var sqlConnection = ConfigurationManager
                   .ConnectionStrings["MyConnectionString"].ConnectionString;
 

37voto

David Ebbo Points 13246

La meilleure façon de le faire est d'ajouter une Chaîne de Connexion à partir du portail Azure:

  • À partir de votre Fonction INTERFACE utilisateur de l'Application, cliquez sur la Fonction des Paramètres de l'Application
  • Paramètres / Paramètres De L'Application
  • Ajouter les chaînes de connexion

Ils seront ensuite disponibles à l'aide de la même logique que s'ils étaient dans un site web.config, par exemple

var conn = System.Configuration.ConfigurationManager
                 .ConnectionStrings["MyConn"].ConnectionString;

Ou si vous utilisez un non-.NET langue, vous pouvez utiliser les Paramètres de l'Application au lieu de cela, qui deviennent de simples variables d'environnement lors de l'exécution de vos fonctions peuvent accéder.

31voto

Jeson Martajaya Points 434

Todd De Terre de réponse ne fonctionne que pour l'environnement local. Cependant par cette doc, publié Azure Fonction des besoins de chaînes de connexion à être stockés en tant que paramètres de l'application et de l'extrait en GetEnvironmentVariable.

L'ajout d' System.Configuration référence d'assembly est inutile.

string cs = Environment.GetEnvironmentVariable("MyConnectionString",EnvironmentVariableTarget.Process);

Voici les étapes pour rendre l'environnement des chaînes de récupérable pour à la fois locale et publié environnement

  1. À l'appui de l'environnement local, en local.settings.json, spécifiez vos chaînes de connexion à l'intérieur d' Values noeud

local.settings.json picture

  1. Pour soutenir publié environnement, aller à l' portal.azure.com > your Azure Function > function node > Application Settings

Application Settings

Add MyConnectionString

  1. Enfin, appelez - GetEnvironmentVariable de votre Azure Fonction (cant get stackoverflow pour afficher correctement ce code)

enter image description here

Thats it.

29voto

Johannes Points 191

Configuration Manager sera remplacé par le nouveau système de configuration Asp.Net Core dans Functions Runtime v2.

Donc, si vous utilisez .Net Core, vous devez suivre l'article du blog de John Gallants: https://blog.jongallant.com/2018/01/azure-function-config/

  • Fonctionne avec local.settings.json et les paramètres dans Azure Function
  • Fonctionne avec les paramètres de l'application et les chaînes de connexion

18voto

batmaci Points 411

Je suis passé par plusieurs autres questions et réponses ici. Beaucoup d'entre eux sont soit trompeuse ou en supposant que tout le monde est sur le même niveau et comprend comment l'azur de fonctions de travail. il n'y a pas de réponse pour les débutants comme moi. Je voudrais résumer ici ma solution étape par étape.

  1. le plus important, c'est que nous comprenons local.les paramètres.fichier json N'EST PAS POUR AZURE. il est à exécuter votre application en local, puisque le nom est dit clairement. Donc la solution est de ne rien faire avec ce fichier.

  2. App.Config ou Web.Config ne marche pas pour Azure fonction de chaînes de connexion. Si vous avez de la Couche de Base de données de la Bibliothèque, vous ne pouvez pas remplacer la chaîne de connexion à l'aide de l'un de ces comme vous le feriez dans Asp.Net des applications.

  3. Afin de travailler avec, vous devez définir votre chaîne de connexion sur le portail azure, en vertu de l' Application Settings dans votre Azure fonction. Il est Les chaînes de connexion. là, vous devez copier votre chaîne de connexion de votre DBContext. si c'est edmx, il ressemble comme ci-dessous. Il est le type de Connexion, je l'utilise SQlAzure mais je l'ai testé avec de la Coutume(quelqu'un prétendait ne fonctionne qu'avec des personnalisés) fonctionne avec les deux.

les métadonnées=res://Modèles.myDB.csdl|res://Modèles.myDB.lsed|res://*/Modèles.myDB.msl;fournisseur=Système.Les données.SqlClient;fournisseur chaîne de connexion= " data source=[yourdbURL];initial catalogue=myDB;persist security info=True;user id=xxxx;password=xxx;MultipleActiveResultSets=True;App=EntityFramework

  1. Après cela, Vous avez besoin de lire l'url de votre application et de fournir les DBContext. DbContext met en œuvre un constructeur avec un paramètre de chaîne de connexion. Par défaut, le constructeur sans paramètre, mais vous pouvez l'étendre. si vous utilisez des classes POCO, vous pouvez modifier la classe DbContext simplement. Si vous utilisez la Base de données générée Edmx classes comme moi, vous ne voulez pas toucher la génération automatique d'edmx classes, au contraire, vous voulez créer de la classe partielle dans le même espace de noms et d'étendre cette classe comme ci-dessous.

C'est généré automatiquement DbContext

namespace myApp.Data.Models
{   

    public partial class myDBEntities : DbContext
    {
        public myDBEntities()
           : base("name=myDBEntities")
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }

}

c'est la nouvelle classe partielle, vous créez

namespace myApp.Data.Models
{
    [DbConfigurationType(typeof(myDBContextConfig))]
    partial class myDBEntities
    {

        public myDBEntities(string connectionString) : base(connectionString)
        {
        }
    }

      public  class myDBContextConfig : DbConfiguration
        {
            public myDBContextConfig()
            {
                SetProviderServices("System.Data.EntityClient", 
                SqlProviderServices.Instance);
                SetDefaultConnectionFactory(new SqlConnectionFactory());
            }
        }
    }
  1. Après tout, vous pouvez obtenir la chaîne de connexion à partir d'azur paramètres, dans votre Azure Fonction du projet avec le code ci-dessous et fournir à votre DbContext myDBEntities est le nom que vous avez donné dans le portail azure pour votre chaîne de connexion.
var connString = ConfigurationManager.ConnectionStrings["myDBEntities"].ConnectionString;


 using (var dbContext = new myDBEntities(connString))
{
        //TODO:
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X