Visual Studio中Azure功能中的实体框架

Han*_*uff 3 c# entity-framework azure

在Visual Studio中,我有一个用C#编写的Azure函数,它应该使用Entity Framework(EF6)从Azure SQL数据库中读取.

我无法让Entity Framework工作.当我发布Azure功能时,我收到错误:

在Code First模式中使用上下文,其中包含从EDMX文件生成的用于Database First或Model First开发的代码.这将无法正常工作.要解决此问题,请不要删除引发此异常的代码行.如果您希望使用Database First或Model First,请确保Entity Framework连接字符串包含在启动项目的app.config或web.config中.如果要创建自己的DbConnection,请确保它是EntityConnection而不是其他类型的DbConnection,并将其传递给采用DbConnection的基本DbContext构造函数之一.要了解有关Code First,Database First和Model First的更多信息,请参阅此处的Entity Framework文档:http://go.microsoft.com/fwlink/?LinkId = 394715

这些都没有奏效.

我还尝试在许多网站推荐的Azure中添加一个project.json文件,但这并没有改变任何东西.

这是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}");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Bru*_*hen 6

根据您的描述,我假设您正在使用Database First或Model First,并且您为实体数据模型配置了错误的Entity Framework连接字符串.我测试并发现如果我在使用Database First时直接从Azure门户复制连接字符串,我会遇到您提供的类似问题,如下所示:

在此输入图像描述

对于Database First,我建议您修改生成Model.Content.cs并配置DbContext,如下所示:

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

    }
}
Run Code Online (Sandbox Code Playgroud)

注意:您可以修改t4模板,并确保在从数据库更新模型后不会覆盖DbContext的修改.

对于dev,您可以在local.settings.json文件下设置连接字符串,如下所示:

"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'"
}
Run Code Online (Sandbox Code Playgroud)

在发布到azure之前,您可以创建一个与您在local.settings.jsonfile 下配置的连接字符串相同的连接字符串,并按如下方式设置连接字符串:

在此输入图像描述

此外,您可以遵循有关在Azure功能中使用EF Database First的方法的类似问题.