问题标签 [fsharp.data.sqlclient]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
235 浏览

f# - FSharp.Data.SqlCient 在本地工作,但不在生产服务器上

我遇到了 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 文件:

在同一个 F# 项目中,我有另一个文件用于访问运行时连接字符串:

在主 C# 项目中,我有一个 app.config 文件:

并在 appsettings.json 中配置如下:

这是实际的查询代码:

**更新:** 远程调试应用程序后,这是它给出的完整错误消息

建立与 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# 项目如何在主项目中定位文件?我只是把事情复杂化了吗?

0 投票
1 回答
740 浏览

f# - F# 过滤具有多种选项类型的记录

好吧,奇怪的问题来了。我FSharp.Data.SqlClient用来从我们的数据库中获取记录。它推断的记录有几个选项类型的字段。我需要过滤掉 ANY 选项类型为 None 的记录,并创建已知字段的新记录。下面是我所说的一个例子。为了解决这个问题,我创建了一个过滤函数 ,它在所有类型都包含值recordFilter的情况下返回我想要的类型,而当它们不包含值时返回。Option<'T>None

我的问题是是否可以创建一个函数来自动检查Option<'T>记录中的所有字段是否具有值。我猜这需要某种反射来遍历记录的字段。我猜这是不可能的,但我想把它扔出去以防我错了。

如果这种方法是惯用的方法,那么我会很高兴听到这一点。我只是想确保我不会错过一些更优雅的解决方案。F# 的可能性总是让我感到惊讶。

我的动机是我正在处理具有数十个字段类型的记录Option<'T>match...with像我在这个例子中所做的那样,必须写出大量的语句是很烦人的。当只有几个字段时很好,当它是 30+ 字段时,很烦人。

0 投票
2 回答
211 浏览

f# - 为什么程序仍在运行,而错误 FS0039 未定义类型“JsonProvider”?

我正在尝试使用 JsonProvider 的示例来学习 Fsharp.data,但我不明白为什么我在编译错误时仍在运行程序。

在此处输入图像描述

0 投票
2 回答
165 浏览

f# - 生成类型提供程序的编译时错误

FSharp.Data.SqlClient我在与生成SqlEnumProvider类型提供程序合作的一个分支上遇到了问题。当测试项目尝试使用提供的类型时,我收到以下编译时错误:

A problem occurred writing the binary 'C:\code\FSharp.Data.SqlClient\src\SqlClient.Tests\obj\Debug\net451\SqlClient.Tests.dll': Error in pass3 for type FSharp.Data.EnumTests, error: Error in GetMethodRefAsMethodDefIdx for mref = ("Parse", "TinyIntMapping"), error: Exception of type 'Microsoft.FSharp.Compiler.AbstractIL.ILBinaryWriter+MethodDefNotFound' was thrown.

在设计时,一切似乎都按预期工作。(我对提供的类型有智能感知等)

我尝试了这里建议的解决方法,但没有任何乐趣。

0 投票
1 回答
194 浏览

f# - Project with generated types fails on Assembly.GetExportedTypes()

I'm working on upgrading FSharp.Data.SqlClient to the latest version of the Type Provider SDK and I'm seeing an error when using generated types. The test project, which references numerous generated types, compiles just fine, but when I attempt to run the xunit tests I get the following exception:

System.TypeLoadException: Could not load type 'BTL' from assembly 'SqlClient.Tests, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' because the parent does not exist. at System.Reflection.RuntimeAssembly.GetExportedTypes(RuntimeAssembly assembly, ObjectHandleOnStack retTypes) at System.Reflection.RuntimeAssembly.GetExportedTypes() at <StartupCode$FSI_0005>.$FSI_0005.main@()

I'm not sure what the type BTL refers to - I don't see any symbol with that name anywhere in the test or in the type provider source. And I've confirmed that the issue is related to generated types - if I comment out all references to SqlEnumProvider but leave references to erased types, the tests all pass.

0 投票
1 回答
224 浏览

f# - F# - FSharp.Data.SqlClient - 获取标识值后更新行

假设我有以下内容:

SQL

创建名为 的数据库Clm,然后运行此脚本:

F#

应用程序配置

db.config

我需要从表中获取 SQL 标识值ModelData。它在代码中的某处使用。所以,我有以下函数来添加一个带有一些默认值的新行,然后取回标识值。

我用它modelId从数据库中获取新的身份值。

在大约 0.5 – 1.5 小时的执行时间之后,我需要更新一些数据,例如

其中字符串"Some new data..."表示一些相当大的字符串。这只发生一次modelId。上面的代码确实有效。但它看起来很丑,尤其是部分t1.Rows |> Seq.find ...☹我想我错过了关于FSharp.Data.SqlClient类型提供程序的一些东西。我会很感激任何建议。

0 投票
1 回答
301 浏览

sql-server - F# - FSharp.Data.SqlClient – How to specify timeout for Update

I use FSharp.Data.SqlClient type providers to access SQL server database. So, I set up the types in F# something as follows:

and then I use it something like that:

where ResultData is some type, which "knows" how to convert itself into a row of ResultDataTable (ResultDataTableRow). The extension r.addRow t does that.

Everything is great, except that the row that I am inserting might be fairly large (25-30 MB in size) and so, I have a bad feeling that t.Update(conn) might randomly time out especially due to nearly 100% processor load (the computational system core is designed to consume all processing resources, though at low priority). Hovering over t.Update does not show any way to specify a timeout and any timeout at the level of connection is related, well, to a connection, not to the insert transaction ☹.

So, the question is how to specify timeout for an Update transaction.

Thanks a lot!

20190116 update - So far t.Update(conn) above is holding up without timeouts on my machine while inserting 95MB data rows at 100% below normal load of some other stuff running there. I have not yet measured the actual time for such transactions. If I do, then I will update this.

0 投票
0 回答
177 浏览

f# - F# 类型提供程序 FSharp,Data.SqlClient 目标 .NetStandard 2.0 在使用命令行中的 dotNet 构建时失败,但在 Visual Studion 2019 中成功

我在针对 .Net-Standard-2.0 的 DLL 中使用 F# 类型提供程序 FSharp.Data.SqlClient,虽然这在 Visual Studio 2019 中成功构建,但当我尝试使用命令提示符编译器 dotNet 编译器构建它时失败,并出现以下错误信息

我正在使用 FSharp.Data.SqlClient 版本 2.0.6 和 System.Data.SqlClient 版本 4.8.1 和 FSharp.Core 版本 4.7.0

对此问题的任何帮助将不胜感激

0 投票
1 回答
63 浏览

f# - 如何使用 FSharp.Data.SqlClient 更新对象的多个字段

我一直在研究 F# 与 CRUD 和 data 的关系。我一直在使用 FSharp.Data.SqlClient

我看不到从对象更新所有字段的简单方法。

例如,我想执行下面的代码 - 然后我想将该数据呈现给网页。网页将进行一些更改(也许) - 然后我想使用该对象来更新数据库。

我不想编写代码来映射每个字段。此外,我仍在努力弄清楚这是如何以不可变的方式完成的。

0 投票
2 回答
244 浏览

f# - FS0039: 命名空间未定义

我正在 F# 中构建一个 Web API 来测试一些东西。我来自 C# 背景,我已经组织了我在那里做的事情。

你可以在这里找到回购:https ://github.com/MrGodlike6/WebApiTest

我在 WebApiTest.WebApi 中引用了 WebApiTest.Repositories.SqlServer 项目,但由于某种原因,Visual Studio 说它找不到 WebApiTest.Repositories.SqlServer 命名空间。

问题是解决方案编译得很好,我可以运行应用程序,只是我没有智能感知来自 SqlServer 项目的任何东西(例如,在 CompositionRoot 模块中)。

我已经尝试了很多东西,从不同的数据库到为数据库项目制作一个 .NET Framework 4.7.2 项目。到目前为止,没有任何效果。尝试了 Nuget 和 Paket,没有任何区别。尝试过 VS 2019。在 VS 2022 中,它给出了一些不相关的编译错误。

我使用 JetBrains 的 dotPeek 来查看生成的 .dll,并且命名空间和模块按预期存在。不知道是什么原因造成的。

您还可以指出我使用的项目/文件夹结构是否适用于 F#?也欢迎任何其他建议。

编辑:SQL 部分基于https://github.com/isaacabraham/get-programming-fsharp/tree/master/src/code-listings/lesson-35。这里一切正常,尽管 SQL 代码没有放在单独的项目中。

我已经评论了 SqlEnumProvider 并且我不再在组合根中遇到问题。我会仔细看看这个提供者,看看我能不能想出一些东西。

EDIT2:在 GitHub 上创建了一个问题:https ://github.com/fsprojects/FSharp.Data.SqlClient/issues/410