我正在创建一个Azure函数,并且已经添加了对使用实体框架的项目的引用。我已经从该项目复制了连接字符串,并将其粘贴为local.settings.json
对象内的ConnectionStrings
文件中作为有效的EF连接字符串。
metadata=res://*/xxx.csdl|res://*/xxx.ssdl|res://*/xxx.msl;
provider=System.Data.SqlClient;
provider connection string="e;
data source=xxx;
initial catalog=xxx;
user id=xxx;
password=xxx;
MultipleActiveResultSets=True;
App=EntityFramework
"e;
但是给了我这个例外:
不支持关键字:
metadata
。
如果我使用有效的SQL连接字符串(如下所示),
data source=xxx;
initial catalog=xxx;
user id=xxx;
password=xxx;
MultipleActiveResultSets=True;
App=EntityFramework
我有这个例外:
在代码优先模式下,将上下文与从
EDMX
文件生成的代码一起用于数据库优先或模型优先开发。这将无法正常工作。若要解决此问题,请不要删除引发此异常的代码行。如果要使用数据库优先或模型优先,请确保在启动项目的app.config
或web.config
中包含Entity Framework连接字符串。如果要创建自己的DbConnection
,请确保它是EntityConnection
而不是其他类型的DbConnection
,并将其传递给基本{{1} }使用DbContext
的构造函数。要了解有关代码优先,数据库优先和模型优先的更多信息,请参见Entity Framework文档:http://go.microsoft.com/fwlink/?LinkId=394715
如何使用Entity Framework在Azure函数中创建到数据库的连接?我正在使用.NET Framework,对于EF,我首先使用数据库。
我按如下所示初始化数据库上下文:
DbConnection
与此同时,我为委托人using (XxxDB db = new XxxDB())
{ }
XxxDB
并在创建public XxxDB(string connectionString): base(new EntityConnection(connectionString), true)
{ }
时传递SQL连接字符串,并得到此错误:
不支持关键字:
XxxDB
。
答案 0 :(得分:1)
好的,这是由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;
}