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

Posted

技术标签:

【中文标题】更改 EF 连接字符串给出 - 不支持关键字:\'元数据\'【英文标题】:Changing the EF connection string gives - Keyword not supported: 'metadata'更改 EF 连接字符串给出 - 不支持关键字:'元数据' 【发布时间】:2016-02-02 12:55:37 【问题描述】:

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

我有一个使用Entity Framework 5C# 应用程序,并且我有一个.edmx 数据模型,在使用应用程序配置文件中的连接字符串时可以正常工作。

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

不支持关键字:“元数据”。

这是我的代码:

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;提供者 连接字符串="数据源=myServer;初始 目录=myDatabase;集成安全性=True;用户 ID=myDbUser;Password=myDbUserPassword;MultipleActiveResultSets=True"

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

【问题讨论】:

您使用了错误的提供程序。如果您希望该连接正常工作,请使用 System.Data.EntityClient 而不是 System.Data.SqlClient 另一个人也有同样的问题:***.com/a/25041876/609176 @rene 我试过了,但它给出了另一个例外 - The specified store provider cannot be found in the configuration, or is not valid. @DavidSpence 我看到了这篇文章,请查看我上面的评论。 顺便提一下,我已经安装了Entity framework 5.0。 【参考方案1】:

这个答案:Entity Framework change connection at runtime 解决了问题

我无法理解我的代码有什么问题,但它可以与链接中的扩展方法正常工作。

【讨论】:

以上是关于更改 EF 连接字符串给出 - 不支持关键字:'元数据'的主要内容,如果未能解决你的问题,请参考以下文章

如何更改Update-Database ef迁移的连接字符串?

如何动态更改EF的DBContext的连接字符串

如何动态更改EF的DBContext的连接字符串

如何在一处维护 EF 连接字符串?

在 EF6 中更改数据库架构的最简洁方法

不支持连接字符串关键字“服务器”