使用外部启动应用程序在应用程序配置中找不到连接字符串
No connection string found in App config using external Start-up application
我正在使用 Visual Studio 2013 .Net 4.5 在 C# 中创建一个 dll 项目。该项目包含一个使用 EF6 的实体模型。我的 dll 将作为外部应用程序的插件调用,属于某些硬件产品的软件套件。
我已经 visual studio 设置,这样当我按下调试时,它会启动这个外部应用程序(我将称为网关),然后调用我的 dll,允许我进行调试。
当我的 dll 尝试调用实体模型时出现问题。我得到:
InvalidOperationException -- 'System.InvalidOperationException' 类型的未处理异常发生在 ENTITYFRAMEWORK.dll
中
'在应用程序配置文件中找不到名为 'Entity' 的连接字符串。
现在,我的配置文件非常清楚地包含了我在设置模型时由 VS 添加的所需连接字符串。我已经阅读了所有与此问题类似的帖子,将连接字符串添加到配置中不是问题。
网关确实了解真实的数据库实例,并在配置中获得了该实例的连接字符串。但是,实体连接字符串和实例连接字符串不同,因为 VS 和 EF 添加了实体行话。
我能够创建一个控制台应用程序来调用我的 dll,能够进行实体调用。我必须向控制台应用程序提供对我的 dll 和 entity framework 的引用,并将连接字符串添加到控制台应用程序配置文件中。
这让我相信,任何调用我的 dll 的应用程序都必须了解 EF 和连接字符串。
是这样吗?如果是这样,在我看来我将无法为该项目使用 EF,因为我无法让网关知道 EF。
感谢您的意见!
所以在这种情况下我要做的是创建一个新的上下文,它继承自您当前的上下文,并在构造函数中传入连接字符串。
或者,您也可以创建一个连接字符串,然后您可以将其传递到上下文的构造函数重载中。
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;
}
你不能根据sql连接字符串组成Entity连接字符串吗?
否则看看这个问题:How to have DLL specific config file?
基本上您是在为 dll 文件提供配置。所以除了 myapplication.exe.config 你还可以有一个 myddl.dll.config
我正在使用 Visual Studio 2013 .Net 4.5 在 C# 中创建一个 dll 项目。该项目包含一个使用 EF6 的实体模型。我的 dll 将作为外部应用程序的插件调用,属于某些硬件产品的软件套件。
我已经 visual studio 设置,这样当我按下调试时,它会启动这个外部应用程序(我将称为网关),然后调用我的 dll,允许我进行调试。
当我的 dll 尝试调用实体模型时出现问题。我得到:
InvalidOperationException -- 'System.InvalidOperationException' 类型的未处理异常发生在 ENTITYFRAMEWORK.dll
中'在应用程序配置文件中找不到名为 'Entity' 的连接字符串。
现在,我的配置文件非常清楚地包含了我在设置模型时由 VS 添加的所需连接字符串。我已经阅读了所有与此问题类似的帖子,将连接字符串添加到配置中不是问题。
网关确实了解真实的数据库实例,并在配置中获得了该实例的连接字符串。但是,实体连接字符串和实例连接字符串不同,因为 VS 和 EF 添加了实体行话。
我能够创建一个控制台应用程序来调用我的 dll,能够进行实体调用。我必须向控制台应用程序提供对我的 dll 和 entity framework 的引用,并将连接字符串添加到控制台应用程序配置文件中。
这让我相信,任何调用我的 dll 的应用程序都必须了解 EF 和连接字符串。
是这样吗?如果是这样,在我看来我将无法为该项目使用 EF,因为我无法让网关知道 EF。
感谢您的意见!
所以在这种情况下我要做的是创建一个新的上下文,它继承自您当前的上下文,并在构造函数中传入连接字符串。
或者,您也可以创建一个连接字符串,然后您可以将其传递到上下文的构造函数重载中。
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;
}
你不能根据sql连接字符串组成Entity连接字符串吗?
否则看看这个问题:How to have DLL specific config file?
基本上您是在为 dll 文件提供配置。所以除了 myapplication.exe.config 你还可以有一个 myddl.dll.config