Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Entity Framework in Azure Function in Visual Studio

In Visual Studio I have an Azure Function, written in C#, which is supposed to read from an Azure SQL database using Entity Framework (EF6).

I cannot get Entity Framework to work. When I publish the Azure Function I get the error:

The context is being used in Code First mode with code that was generated from an EDMX file for either Database First or Model First development. This will not work correctly. To fix this problem do not remove the line of code that throws this exception. If you wish to use Database First or Model First, then make sure that the Entity Framework connection string is included in the app.config or web.config of the start-up project. If you are creating your own DbConnection, then make sure that it is an EntityConnection and not some other type of DbConnection, and that you pass it to one of the base DbContext constructors that take a DbConnection. To learn more about Code First, Database First, and Model First see the Entity Framework documentation here: http://go.microsoft.com/fwlink/?LinkId=394715

None of this worked.

I also tried to add a project.json file in Azure as recommended by many websites but that didn’t change anything.

Here is the C#.

public static class Function1
{
    [FunctionName("Function1")]
    public static void Run([TimerTrigger("*/100 * * * * *")]TimerInfo myTimer, TraceWriter log)
    {
        try {
            using (var qc = new quotecandyEntities()) {

                if (qc.Users.Any()) {
                    log.Info($"The last user is {qc.Users.Last().Email}.");

                } else {
                    log.Info("No users found in database.");
                }
            }
        } catch (Exception ex) {
            log.Error($"Error: {ex.Message}");
        }
    }
}
like image 601
Hank Tuff Avatar asked Nov 19 '25 16:11

Hank Tuff


1 Answers

According to your description, I assumed that you are using Database First or Model First, and you configured the wrong Entity Framework connection string for your Entity Data Model. I tested and found that if my directly copy the connection string from Azure Portal while I am using Database First, I would encounter the similar issue you provided as follows:

enter image description here

For Database First, I would recommend you modify the generated Model.Content.cs and configure your DbContext as follows:

public partial class Entities : DbContext
{
    public Entities():base(ConfigurationManager.ConnectionStrings["Entities"].ConnectionString)
    {

    }
}

Note: You could modify the t4 template and make sure you modification for your DbContext does not overridden after you updated the model from your database.

For dev, you could set your connection string under local.settings.json file as follows:

"ConnectionStrings": {
  "Entities": "metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string='data source={server-name}.database.windows.net;initial catalog={db-name};persist security info=True;user id={username};password={password};MultipleActiveResultSets=True;App=EntityFramework'"
}

Before publishing to azure, you could create a connection string with the same as you configured under local.settings.json file and set the connection string as follows:

enter image description here

Moreover, you could follow this similar issue about the approach for using EF Database First in Azure Function.

like image 133
Bruce Chen Avatar answered Nov 21 '25 05:11

Bruce Chen