我遇到了 FSharp.Data.SqlClient 的问题。我正在构建一个 Asp.net Core 完整框架 4.6 Web 应用程序。主要项目在 C# 中,它引用了 F# 中的几个项目。这些 F# 项目中的每一个都使用 FSharp.Data.SqlClient 进行数据访问。在本地运行应用程序时,一切正常,但是当我将它部署到天蓝色时,当 F# 代码尝试执行查询时,我收到错误“实例失败”。
我怀疑在某种程度上它与连接字符串的使用方式或 FSharp.Data.SqlClient 和实体框架之间的某种运行时冲突有关。实体框架在主要项目中处理成员数据,仅此而已。我必须在主项目的配置文件中专门添加一个连接字符串,以便引用的 F# 项目可以在运行时访问数据库。实体框架通过 AppSettings.Json 文件使用它的数据字符串。我不知道是否有更好的方法来连接它,但同样,当我在本地运行它而不是在它被部署到的服务器上运行它时,它可以完美地工作。
我需要启用或更改代码以使应用程序在生产服务器上运行吗?
这是我的数据字符串的视图。在我的 F# 项目中,我有一个 app.config 文件:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="DefaultConnection" connectionString="Data
Source=server code here"
providerName="System.Data.SqlClient" />
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7" />
</startup>
</configuration>
在同一个 F# 项目中,我有另一个文件用于访问运行时连接字符串:
module internal DbAdmin
open FSharp.Data
open FSharp.Configuration
module Admin =
// runtime connection string
type private Config = AppSettings<"App.config">
let rtConnection = Config.ConnectionStrings.DefaultConnection
在主 C# 项目中,我有一个 app.config 文件:
<configuration>
<runtime>
<gcServer enabled="true"/>
</runtime>
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=server
code here" providerName="System.Data.SqlClient"/>
</connectionStrings>
</configuration>
并在 appsettings.json 中配置如下:
{
"ConnectionStrings": {
"DefaultConnection": "Data Source=Server code Here"
}
}
这是实际的查询代码:
type Select_AllArticles =
SqlCommandProvider<
"
select * from article.vw_AllArticlesAndDetails
", Admin.connectionString, ConfigFile = Admin.configFile
>
try
succeedWithMsg
(Select.Select_AllArticles.Create(Admin.rtConnection).Execute() |>
Seq.toList)
(createGoodMsg(OK("Some Success Message.")))
with
| ex -> fail (createBadMsg(DbError(ex.Message + " --selectAllArticles")))
**更新:** 远程调试应用程序后,这是它给出的完整错误消息
建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:SQL 网络接口,错误:26 - 错误定位服务器/指定的实例)
这对我来说很奇怪,因为使用的连接字符串与 Entity Framework 使用的连接字符串相同,它似乎可以很好地访问数据库。
新更新 好的,我想我知道发生了什么。我相信这绝对是一个配置问题。所以正如我之前所说,在开发中我必须创建一个配置文件才能创建一个 FSharp.Data.SqlClient 可以连接的连接字符串。我不知道如何让它连接到 appsettings.json 文件中的连接字符串。也许有人可以向我解释,因为这可能是最好的解决方案。无论如何,我假设配置文件中的连接字符串在部署时没有通过手动插入生产服务器连接字符串,然后部署应用程序来更新。果然问题解决了,一切正常。所以,现在的问题是,获取 FSharp.Data 的最佳方式是什么。SqlClient 在使用 appsettings.json 文件的核心应用程序中正确连接到连接字符串?我该如何处理这个问题?我需要有人带我完成它,因为我是新手。
当前状态
所以在意识到这确实是一个配置问题之后,现在的问题是如何通过我的 F# 项目从 appsettings.json 文件中正确检索连接设置。使用 FSharp.Data json 提供程序,我需要弄清楚如何正确定位 appsettings.json 文件以供生产和开发使用。F# 项目如何在主项目中定位文件?我只是把事情复杂化了吗?