更改EF连接字符串给出-不支持关键字:';元数据';

本文关键字:关键字 元数据 不支持 连接 EF 字符串 更改 | 更新日期: 2023-09-27 18:20:11

在过去的几个小时里,我一直在研究这个问题,发现了许多类似的主题,但似乎都没有帮助。

我有一个使用Entity Framework 5C#应用程序,还有一个使用应用程序配置文件中的连接字符串时运行良好的.edmx数据模型。

现在我想在运行时更改连接字符串,但它抛出了一个异常:

不支持关键字:"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:///MeTestModel.ssdl|res://*/MyTestModel.MyTest Model.msl;provider=System.Data.SqlClient;提供者connection string="数据源=myServer;初始Catalog=myDatabase;综合安全=正确;使用者ID=myDbUser;密码=myDbUserPassword;MultipleActiveResultSets=True"

我看不出它出了什么问题,有人能发现什么吗?

更改EF连接字符串给出-不支持关键字:';元数据';

这个答案:运行时实体框架更改连接解决了问题

我不明白我的代码有什么问题,但它可以很好地与链接中的扩展方法配合使用。