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}");
}
}
}
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:

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:

Moreover, you could follow this similar issue about the approach for using EF Database First in Azure Function.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With