使用外部启动应用程序在App config中找不到连接字符串

时间:2015-02-10 16:05:01

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

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

我设置了visual studio,这样当我按下它时会启动这个外部应用程序(我将称之为网关),然后调用我的dll,允许我调试。

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

InvalidOperationException - 类型' System.InvalidOperationException'的未处理异常。发生在ENTITYFRAMEWORK.dll

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

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

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

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

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

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

感谢您的投入!

2 个答案:

答案 0 :(得分:0)

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

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

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;
    }

答案 1 :(得分:0)

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

其他人见过这个问题:How to have DLL specific config file?

基本上,您正在为dll文件提供配置。除了myapplication.exe.config之外,您还可以拥有myddl.dll.config