更改 EF 连接字符串给出 - 不支持关键字:'metadata'
Changing the EF connection string gives - Keyword not supported: 'metadata'
在过去的几个小时里,我一直在研究这个问题,发现了许多类似的主题,但其中 none 似乎有所帮助。
我有一个使用 Entity Framework 5
的 C#
应用程序,并且我有一个 .edmx
数据模型,在使用应用程序配置文件中的连接字符串时工作正常。
现在我想在运行时更改连接字符串,但它抛出了一个异常:
Keyword not supported: 'metadata'.
这是我的代码:
private string GetNewConnectionString(string server, string database, string username, string password)
{
var sqlBuilder = new SqlConnectionStringBuilder()
{
DataSource = server,
InitialCatalog = database,
UserID = username,
Password = password,
IntegratedSecurity = true,
MultipleActiveResultSets = true
};
var entityBuilder = new EntityConnectionStringBuilder()
{
Provider = "System.Data.SqlClient",
ProviderConnectionString = sqlBuilder.ToString(),
Metadata = "res://*/MyTestModel.MyTestModel.csdl|res://*/MyTestModel.MyTestModel.ssdl|res://*/MyTestModel.MyTestModel.msl"
};
return entityBuilder.ToString();
}
public void insertInDB()
{
var newConnectionString = GetNewConnectionString(server, database, username, password);
//newConnectionString = newConnectionString .Replace("\"", """); // doesn't help
//newConnectionString = newConnectionString .Replace("\"", "'"); // doesn't help either
using (var context = new MyTestModel.MyEntities(newConnectionString)) // it crashes here
{
}
}
元数据应该是正确的,因为我已经从应用程序配置文件中复制了它,而且如果我将 newConnectionString
的值复制到应用程序配置中并使用它,如果我替换引号也可以正常工作"
.
这是 newConnectionString
的值(我只用一些虚拟凭证替换了凭证):
metadata=res:///MyTestModel.MyTestModel.csdl|res:///MyTestModel.MyTestModel.ssdl|res://*/MyTestModel.MyTestModel.msl;provider=System.Data.SqlClient;provider
connection string="Data Source=myServer;Initial
Catalog=myDatabase;Integrated Security=True;User
ID=myDbUser;Password=myDbUserPassword;MultipleActiveResultSets=True"
我看不出有什么问题,有人能发现什么吗?
这个回答:Entity Framework change connection at runtime解决了问题
我不明白我的代码有什么问题,但它与 link 的扩展方法一起工作正常。
在过去的几个小时里,我一直在研究这个问题,发现了许多类似的主题,但其中 none 似乎有所帮助。
我有一个使用 Entity Framework 5
的 C#
应用程序,并且我有一个 .edmx
数据模型,在使用应用程序配置文件中的连接字符串时工作正常。
现在我想在运行时更改连接字符串,但它抛出了一个异常:
Keyword not supported: 'metadata'.
这是我的代码:
private string GetNewConnectionString(string server, string database, string username, string password)
{
var sqlBuilder = new SqlConnectionStringBuilder()
{
DataSource = server,
InitialCatalog = database,
UserID = username,
Password = password,
IntegratedSecurity = true,
MultipleActiveResultSets = true
};
var entityBuilder = new EntityConnectionStringBuilder()
{
Provider = "System.Data.SqlClient",
ProviderConnectionString = sqlBuilder.ToString(),
Metadata = "res://*/MyTestModel.MyTestModel.csdl|res://*/MyTestModel.MyTestModel.ssdl|res://*/MyTestModel.MyTestModel.msl"
};
return entityBuilder.ToString();
}
public void insertInDB()
{
var newConnectionString = GetNewConnectionString(server, database, username, password);
//newConnectionString = newConnectionString .Replace("\"", """); // doesn't help
//newConnectionString = newConnectionString .Replace("\"", "'"); // doesn't help either
using (var context = new MyTestModel.MyEntities(newConnectionString)) // it crashes here
{
}
}
元数据应该是正确的,因为我已经从应用程序配置文件中复制了它,而且如果我将 newConnectionString
的值复制到应用程序配置中并使用它,如果我替换引号也可以正常工作"
.
这是 newConnectionString
的值(我只用一些虚拟凭证替换了凭证):
metadata=res:///MyTestModel.MyTestModel.csdl|res:///MyTestModel.MyTestModel.ssdl|res://*/MyTestModel.MyTestModel.msl;provider=System.Data.SqlClient;provider connection string="Data Source=myServer;Initial Catalog=myDatabase;Integrated Security=True;User ID=myDbUser;Password=myDbUserPassword;MultipleActiveResultSets=True"
我看不出有什么问题,有人能发现什么吗?
这个回答:Entity Framework change connection at runtime解决了问题
我不明白我的代码有什么问题,但它与 link 的扩展方法一起工作正常。