【问题标题】:Entity Framework 6 connection string dll app config实体框架 6 连接字符串 dll 应用程序配置
【发布时间】:2015-10-20 18:27:10
【问题描述】:

我有 2 个项目:控制台应用程序和类库 (dll)

我的主项目控制台应用程序引用了我的 dll。

在我的 dll 中,我创建了一个 EF(实体框架)ADO 模型。

EF 连接字符串必须在 dll 项目.config 文件中。

问题是当我初始化DbContext 时,它正在控制台应用程序.config 文件中寻找连接字符串。

如何告诉DbContext 在 dll .config 文件中查找连接字符串?

谢谢

【问题讨论】:

  • 真正的问题是 “我应该使用 dll 配置文件吗?”answer is "No".尝试搜索。
  • 类库没有有意义的配置文件。应用程序可以。 (您可以将配置文件添加到类库中,但正在运行的应用程序不会使用它。)

标签: c# .net entity-framework dll


【解决方案1】:

这就是配置文件的工作方式。正在运行的应用程序总是在 {appname}.exe.config 中查找。 DLL 项目的配置文件只是为您提供必须复制到正在运行的应用程序配置文件中的占位符。它不与 DLL 一起部署。

【讨论】:

  • 谢谢,但我不想依赖于主项目配置文件,我希望我的 dll “开箱即用”工作,而不在主项目应用程序配置中设置连接字符串。
  • 可以在不同的地方寻找配置,但这由executable程序集决定。我知道没有一种方法可以部署 DLL 和配置文件,并且可执行文件会自动查找 DLL 的配置文件。关键是您配置的是 application 而不是 library。如果你想让库在某处寻找它的配置,那么配置文件将不起作用 - 你必须推出自己的机制。
【解决方案2】:

您应该在控制台应用程序中指定连接字符串。这是一个简单的示例,您为什么要这样做。

  • 想象一下,如果您有另一个应用程序在您的解决方案中使用您的 DLL。如果它想连接到另一个数据库实例怎么办?现在您必须更改您的 DLL 连接字符串?但这会破坏您的第一个应用程序。
  • 您的应用程序的不同实例通常在不同的环境(例如开发、登台、生产)中运行。每个实例都需要连接到不同的数据库。您将如何为每个实例重新配置 DLL 连接字符串?
  • 如果其他人使用您的 DLL,您如何知道他们要将其指向哪个数据库?

还有很多关于你为什么真的想要这样做的论据。所有工具也是围绕它构建的。

  • 我相信 Visual Studio 在为使用这些 DLL 的应用程序编译源代码时不会添加 DLL 配置文件。
  • 托管环境(例如 Azure)允许您轻松更改 web.config 文件,但对 DLL 配置文件一无所知。

【讨论】:

  • 连接字符串不会改变,这就是为什么我希望它对我的 dll 来说是临时的
  • @Howard:如果连接字符串不会更改,则不要将其设置为配置设置。在库中对其进行硬编码。
  • @David 如何告诉“DbContext”查看该特定配置文件?
  • @Howard 您现在不需要更改连接字符串。但是,如果您将来需要这样做怎么办?如果您的数据库服务器出现问题并且您必须将您的应用程序指向另一个应用程序怎么办?
  • @Howard:你不知道,这就是重点。如果您从应用程序配置中获取连接字符串,那么它将在 应用程序配置 中查找。但是,如果您说连接字符串“不会改变”,那么一种选择可能是对其进行硬编码。这是非常规的,通常不推荐,但如果您真的不需要更改连接字符串,那么它当然是一种选择。
猜你喜欢
  • 1970-01-01
  • 2021-08-15
  • 1970-01-01
  • 2017-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多