Azure函数中实体框架的连接字符串 [英] Connection string for Entity Framework in an Azure Function

查看:17
本文介绍了Azure函数中实体框架的连接字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在创建一个Azure函数,并添加了对使用实体框架的项目的引用。我已经从该项目复制了连接字符串,并粘贴到ConnectionStrings对象内的local.settings.json文件中作为有效的EF连接字符串。

metadata=res://*/xxx.csdl|res://*/xxx.ssdl|res://*/xxx.msl;
provider=System.Data.SqlClient;
provider connection string=&quote;
    data source=xxx;
    initial catalog=xxx;
    user id=xxx;
    password=xxx;
    MultipleActiveResultSets=True;
    App=EntityFramework
&quote;

但它给了我一个例外:

不支持关键字:metadata


如果我使用有效的SQL连接字符串(如下所示)

data source=xxx;
initial catalog=xxx;
user id=xxx;
password=xxx;
MultipleActiveResultSets=True;
App=EntityFramework

我有个例外:

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


如何使用实体框架在Azure函数中创建到数据库的连接?我使用的是.NET框架,对于EF,我首先使用的是数据库。


我正在初始化数据库上下文,如下所示:

using (XxxDB db = new XxxDB()) 
{ }

同时,我已经为控制器XxxDB

创建了重载
public XxxDB(string connectionString): base(new EntityConnection(connectionString), true)
{ }

并在创建XxxDB时传递SQL连接字符串,并收到以下错误:

不支持关键字:data source

推荐答案

好吧,这是由EF模型第一个连接字符串的生成方式引起的。EF连接字符串生成器要求构造函数中有一个纯连接字符串。然后首先添加模型的元数据节。

在创建要传递给数据库上下文字符串生成器的新连接字符串时,请更改以下设置:

public XxxDB(string connectionString): base(new EntityConnection(connectionString), true)
{ }

public XxxDB(string connectionString): base(GetEntityConnection(connectionString), true)
{ }

private static string GetEntityConnection(string connectionString)
{
    var efConnection = new EntityConnectionStringBuilder();
    efConnection.ProviderConnectionString = connectionString;
    // res://*/xxx.csdl|res://*/xxx.ssdl|res://*/xxx.msl
    var model = "xxx";
    // this is what's missing in your question
    efConnection.Metadata = string.Format("res://*/Model.{0}.csdl|res://*/Model.{0}.ssdl|res://*/Model.{0}.msl", model);
    return efConnection.ConnectionString;
}

这篇关于Azure函数中实体框架的连接字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆