【发布时间】:2021-11-25 17:45:30
【问题描述】:
我正在为一家汽车租赁公司构建一个包含多个应用程序的系统。所有都应该连接到同一个数据库。将有 Web 应用程序 (ASP.NET)、通用 Windows 应用程序 (WPF) 和用于停车场检查员的 Xamarin 应用程序。
我决定从一个类库项目开始,使用实体框架(代码优先)创建数据库,并执行数据验证,然后将其作为 NuGet 包发布到内部 NuGet 服务器上,然后将其安装在所有三个应用程序中执行 CRUD 操作。
在我的代码中,我在类库项目的App.config 文件中设置了连接字符串。
<connectionStrings><add name="ZoomAutoModel" connectionString="DATA SOURCE=localhost:1521/pdbd; PASSWORD=dummyPassword; PERSIST SECURITY INFO=True; USER ID=dummyUserId" providerName="Oracle.ManagedDataAccess.Client" /></connectionStrings>
然后我创建了一个EntryPoint 项目来在发布之前测试我的类库,我一直收到以下错误:
System.ArgumentException: 'Connection string was not in a correct format'
我确保我在 EntryPoint 项目的引用中有库,让它运行的唯一方法是将连接字符串从类库项目复制到 EntryPoint 项目中。
只是为了测试,我发布了一个 NuGet 包并尝试将其安装在一个完全独立的解决方案中,但我一直收到相同的错误,直到我将连接字符串复制到其 App.config
我的错误在哪里?我不想在所有应用程序的配置文件中提供连接字符串。
我像这样在 DbContext 构造函数中引用连接字符串
public ZoomAutoModel() : base("ZoomAutoModel")
{
}
【问题讨论】:
-
data source=localhost; DATA SOURCE=localhost:1521/pdbd;???错误提示连接字符串错误 -
类库的配置文件没有编译到库dll中,因此在引用时不会跟随库到其他解决方案。如果您希望连接字符串跟随您的库,则需要在其他地方定义它。
-
将连接字符串硬编码到库中是个坏主意。您将必须以一种或另一种方式更改该连接字符串。服务器很可能会发生变化——大多数应用程序不会在与数据库相同的服务器上运行。密码会改变。用户也会如此。在生产环境中使用 Windows 帐户的可能性要大得多,因此即使是
User ID和Password关键字也会发生变化 -
在类库中设置连接字符串确实不是个好主意。根据@PanagiotisKanavos 的评论,最终(可能是几年后),该连接字符串将不得不改变。然后,您将不得不更新每个引用此库的应用程序中的引用(可能会进行重大更改)。如果您必须走这条路,我建议您使用自定义设置库,该库引用存储在内部网络安全位置的全局设置文件,或者如果所有应用程序将在同一台机器上运行,则该机器上的某个位置。跨度>
-
移动连接也非常不稳定。移动应用程序很少直接连接到数据库。通常,它们使用队列、消息传递协议和同步,因此它们不必直接连接。当他们确实连接到数据库时,他们的行为非常不同 - 他们不那么健谈,并尝试尽可能多地下载/上传,因此如果他们以后失去连接也不会受到影响跨度>
标签: c# database entity-framework nuget connection-string