Azure

Create an Azure Function Triggered By Blob Storage Using C#

In this article, we’ll give you an illustration of a basic Azure Function that will trigger an occasion when a record gets transferred to Azure Blob storage and furthermore will track and save those qualities in Database utilizing EntityFrameworkCore, Dependency Injection, and SQL Database.

  • An Azure Storage account
  • SQL Database 
  • Visual Studio with the Azure Development workload enabled. you can also create Azure Function directly in the portal, but the visual studio is preferred when you want easy source control integration.

Create a Storage account in Azure

 

I have already blogged in my previous article that Upload files to Azure blob storage in which I have clearly defined all the steps to create the storage account in azure  Azure Blob Storage.

 

Create an Azure Function using Visual Studio 

 

Open the Visual Studio and click on the create a new project. Choose Azure Functions from the list of available project templates.

 

 

 

In the next section, provide your project name and location to store the project in your machine.

 

Create A Azure Function Triggered By Blob Storage Using C#

 

In the following screen, you can choose the target framework for Azure functions (v2 .Net Core) and Blob Trigger as the type of trigger.

 

Create A Azure Function Triggered By Blob Storage Using C# 

 

Even though v3 is the newest version, we’re choosing the v2 because some packages are not supporting in v3. Choose the Blob trigger template. On the right-hand side, you can choose the storage account since we already configured the storage account from the portal itself we just need to add the connectionstring in the application itself.

 

we’re using EntityFrameworkCore and Dependency Injection to interact with SQL Database

 

 

Required Packages  

 

It’s important to select the correct version number that’s compatible with the version of .Net you’re running on and I’ve also referenced Microsoft.Azure.Functions.Extensions NuGet package which gives us access to the dependency injection feature.

 

Create A Azure Function Triggered By Blob Storage Using C# 

 

Database – Table schema 

  1. CREATE TABLE [dbo].[FileRecords]  
  2. (  
  3.     [Id] UNIQUEIDENTIFIER NOT NULL PRIMARY KEY,   
  4.     [FileName] NVARCHAR(50) NOT NULL,   
  5.     [IsCompleted] BIT NOT NULL,   
  6.     [CreatedTime] DATETIME NOT NULL  
  7. )  

Create an EF Core model for FileRecords item entity and custom DbContext.

 

FileRecord.cs 

 

Since the Id and Created Date values are being generated by the machine dynamically so we defined them in the Model itself.  

  1. using System;  
  2.   
  3. namespace BlobTrigger_AzureFunction.Models  
  4. {  
  5.    public class FileRecords  
  6.     {  
  7.         public Guid Id { getset; } = System.Guid.NewGuid();  
  8.         public string FileName { getset; }  
  9.         public bool IsCompleted { getset; }  
  10.         public DateTime CreatedDate { getset; } = DateTime.UtcNow;  
  11.     }  
  12. }  

AppDbContext.cs

  1. using Microsoft.EntityFrameworkCore;  
  2.   
  3. namespace BlobTrigger_AzureFunction.Models  
  4. {  
  5.     public class AppDbContext : DbContext  
  6.     {  
  7.         public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }  
  8.         public DbSet<FileRecords> FileRecords { getset; }  
  9.     }  
  10. }  

Initialize Dependency Injection

 

To set up the dependency injection for our function app we use the FunctionStartup attribute on the assembly to indicate a startup class that will run when the function app starts. Create a startup class and define the  SQL connection string and register a DbContext in the services, which will allow us to inject the AppDbContext  into our function.

 

Startup.cs 

  1. using BlobTrigger_AzureFunction.Models;  
  2. using Microsoft.Azure.Functions.Extensions.DependencyInjection;  
  3. using Microsoft.EntityFrameworkCore;  
  4. using Microsoft.Extensions.DependencyInjection;  
  5.   
  6. [assembly: FunctionsStartup(typeof(BlobTrigger_AzureFunction.Startup))]  
  7.   
  8. namespace BlobTrigger_AzureFunction  
  9. {  
  10.     public class Startup : FunctionsStartup  
  11.     {  
  12.         public override void Configure(IFunctionsHostBuilder builder)  
  13.         {  
  14.             string connectionString = “Your SQL Connection String”  
  15.             builder.Services.AddDbContext<AppDbContext>(  
  16.                 options => SqlServerDbContextOptionsExtensions.UseSqlServer(options, connectionString));  
  17.         }  
  18.     }  
  19. }  

Injecting DbContext into a function – Constructor Injection

 

Function1.cs 

  1. public class Function1  
  2.     {  
  3.         #region Property  
  4.         private readonly AppDbContext appDbContext;  
  5.         #endregion  
  6.  
  7.         #region Constructor  
  8.         public Function1(AppDbContext appDbContext)  
  9.         {  
  10.             this.appDbContext = appDbContext;  
  11.         }  
  12.         #endregion  
  13.   
  14.         // ….. function defined here 
  15.     }  

Setting up the connection string for Blob Storage

 

When Azure Function runs, it needs to know how to connect to the blob container. Visual Studio has created a file called local.settings.json, we initially created the Storage account from my previous article there I have mentioned copying the connection string from Access keys. Now we have to add the connection string in local.settings.json  
  1. {  
  2.   “IsEncrypted”false,  
  3.   “Values”: {  
  4.     “AzureWebJobsStorage”Your Blob storage connection string,  
  5.     “FUNCTIONS_WORKER_RUNTIME”“dotnet”  
  6.   
  7.   }    
  8. }  

In the boilerplate code, there are two important variables created, name and myBlob

 

Create A Azure Function Triggered By Blob Storage Using C#
  • name – holds the name of the file found in the blob container.
  • myBlob – holds the content of the file.
  • filecontainer – actual container name created in blob storage.
  • connection – blob storage connection string.

Saving the Details to Database

  1. using System.IO;  
  2. using BlobTrigger_AzureFunction.Models;  
  3. using Microsoft.Azure.WebJobs;  
  4. using Microsoft.Extensions.Logging;  
  5.   
  6.   
  7. namespace BlobTrigger_AzureFunction  
  8. {  
  9.     public class Function1  
  10.     {  
  11.         #region Property  
  12.         private readonly AppDbContext appDbContext;  
  13.         #endregion  
  14.  
  15.         #region Constructor  
  16.         public Function1(AppDbContext appDbContext)  
  17.         {  
  18.             this.appDbContext = appDbContext;  
  19.         }  
  20.         #endregion  
  21.   
  22.         [FunctionName(“Triggerwhenfileuploads”)]  
  23.         public void Run([BlobTrigger(“filecontainer/{name}”, Connection = “AzureWebJobsStorage”)] Stream myBlob, string name, ILogger log)  
  24.         {  
  25.             log.LogInformation($“C# Blob trigger function Processed blobn Name:{name} n Size: {myBlob.Length} Bytes”);  
  26.             appDbContext.FileRecords.Add(new FileRecords  
  27.             {  
  28.                 FileName = name,  
  29.                 IsCompleted = true  
  30.             });  
  31.              appDbContext.SaveChanges();  
  32.         }  
  33.     }  
  34. }  

Run the function  

 

Press F5 after successful Build. We can see the following details in the command window.

 

Create A Azure Function Triggered By Blob Storage Using C#

 

Let’s upload a file in the blob container via the Azure portal and see the result is being updated in the Database.

 

Create A Azure Function Triggered By Blob Storage Using C#

 

After successful upload of a file, here we can see an event is triggered for our function we can see the log in the command window,

 

Create A Azure Function Triggered By Blob Storage Using C# 

 

After executing the function below is the final output with the file name and its size is displayed as defined in the logs,

 

Create A Azure Function Triggered By Blob Storage Using C# 

 

Records being saved in the Database as expected.

 

Create A Azure Function Triggered By Blob Storage Using C#

 

 

Summary

 

The new dependency injection feature of Azure Functions makes it very simple to work with Entity Framework Core database contexts within an Azure Functions app, even though there is no explicit EF Core binding for Azure Functions.

 

Thank you for reading, please let me know your questions, thoughts, or feedback in the comments section. I appreciate your feedback and encouragement.

 

Keep learning….!

Tags
Show More

Related Articles

Leave a Reply

Your email address will not be published. Required fields are marked *

Close