【问题标题】:No connection string found in App config using external Start-up application使用外部启动应用程序在应用程序配置中找不到连接字符串
【发布时间】:2015-02-11 00:10:47
【问题描述】:

我正在使用 Visual Studio 2013 .Net 4.5 在 C# 中创建一个 dll 项目。该项目包含一个使用 EF6 的实体模型。我的 dll 将作为外部应用程序的插件调用,该应用程序属于某些硬件产品的软件套件。

我设置了 Visual Studio,因此当我按下调试时,它会启动这个外部应用程序(我将称为网关),然后调用我的 dll,允许我进行调试。

当我的 dll 尝试调用实体模型时会出现此问题。我明白了:

InvalidOperationException -- ENTITYFRAMEWORK.dll 中发生了“System.InvalidOperationException”类型的未处理异常

'在应用程序配置文件中找不到名为'Entity'的连接字符串。

现在,我的配置文件非常清楚地包含了 VS 在设置模型时添加的所需连接字符串。我已经阅读了所有与此问题类似的线程,并且将连接字符串添加到配置不是问题。

网关确实知道真实的数据库实例,并在配置中获得了连接字符串。但是,实体连接字符串和实例连接字符串不同,因为 VS 和 EF 添加了实体术语。

我能够创建一个控制台应用程序来调用我的 dll,能够进行实体调用。我必须为控制台应用程序提供对我的 dll 和实体框架的引用,并将连接字符串添加到控制台应用程序配置文件中。

这让我相信,任何调用我的 dll 的应用程序都必须了解 EF 和连接字符串。

是这样吗?如果是这样,在我看来,我将无法在此项目中使用 EF,因为我无法让网关知道 EF。

感谢您的意见!

【问题讨论】:

    标签: c# .net dll entity-framework-6


    【解决方案1】:

    所以在这种情况下我要做的是创建一个新的上下文,它继承自当前上下文,并在构造函数中传入连接字符串。

    或者,您也可以创建一个连接字符串,然后您可以将其传递给您的上下文的构造函数重载。

    public string GetConnectionString()
        {
            string connectionString = new EntityConnectionStringBuilder
            {
                Metadata = "res://*/Data.System.csdl|res://*/Data.System.ssdl|res://*/Data.System.msl",
                Provider = "System.Data.SqlClient",
                ProviderConnectionString = new SqlConnectionStringBuilder
                {
                    InitialCatalog = ConfigurationManager.AppSettings["SystemDBName"],
                    DataSource = ConfigurationManager.AppSettings["SystemDBServerName"],
                    IntegratedSecurity = false,
                    UserID = ConfigurationManager.AppSettings["SystemDBUsername"],
                    Password = ConfigurationManager.AppSettings["SystemDBPassword"],
                    MultipleActiveResultSets = true,
                }.ConnectionString
            }.ConnectionString;
    
            return connectionString;
        }
    

    【讨论】:

    • 我必须在这里做的是更改我的 DBcontext 的构造函数以获取连接字符串。然后,我像您一样构建了连接字符串并将其传入并理顺了它。
    【解决方案2】:

    你不能根据sql连接字符串组成Entity连接字符串吗?

    另外看看这个问题:How to have DLL specific config file?

    基本上,您正在为 dll 文件提供配置。所以除了 myapplication.exe.config 你还可以有一个 myddl.dll.config

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-17
      • 2012-06-14
      • 2013-04-02
      • 1970-01-01
      相关资源
      最近更新 更多