用F#管理SQL模式

9
由于在F#中使用type providers访问SQL数据的存在,对于ORM(对象关系映射)的使用并没有太多关注,无论是微型还是其他类型。我绝对能理解这背后的逻辑。
另外,似乎很多使用F#操作关系数据的例子都是将其插入到已经创建好的大型数据库中,而这些数据库看起来是在其他地方创建的。
感觉这里有点空缺:是否有一种优雅的方式可以直接从F#中管理模式的创建和迁移?上面链接的示例建议将手动模式创建脚本作为第一步运行。这是唯一的选择吗?
我最近开始了一个小项目,从一开始就采用F#,我正在考虑将一些数据存储在关系型数据库(目前是SQLite)中。我没有现成的模式可供探索,我要从零开始设计。在F#中,是否有更友好或更惯用的方式来管理我的模式(创建和迁移)呢?

这里并不清楚“管理模式创建和迁移”是什么意思。另外,您自己的链接提到了2个库,它们为什么不足够呢?“模式创建”似乎是基本的提供程序功能。 “更友好或更惯用”的意思是什么?为什么要提到ORM?您是在试图说通过“创建”和/或“迁移”,您想将不操作DB的F#程序的状态存储在DB中,就像ORM一样吗?如果是这样,那么您并没有表达清楚。(但是-为什么要这样做?)对于DB意义上的迁移,我可以理解您希望使用专门的工具而不是SQL本身来访问F#。 - philipxy
分而治之。据我所知,没有针对F#的特定数据库模式工具,只需单独管理即可。在我们的解决方案中,我们创建一个小型控制台项目,并使用dbup来应用和跟踪数据库迁移:https://www.nuget.org/packages/dbup。对我们来说足够好了。 - KolA
2个回答

6
您可以使用Entity Framework与F#一起使用,并因此获得它带来的迁移API,但在实践中我发现这非常痛苦 - 所有您的实体类都需要member val get set样式属性(我相信),以及其他各种零碎的东西。几个月前,Jamie Dixon在博客上发表了一篇关于此问题的文章,当时我也在尝试它 - 我并不喜欢它!
老实说,虽然这对您来说不是一个很好的答案,因为您正在寻求在F#中进行DB模式管理 - 我建议您使用诸如VS数据库项目之类的东西来管理代码之外的模式,并使用(是的)SQL类型提供程序之一来管理应用程序内的数据。
如果您坚决要使用“代码中的模式迁移”系统,那么在我的经验中,EF与C#更配合得好,因此您可以在理论上尝试使用例如由您的F#应用程序代码引用的C# / EF数据访问项目。
抱歉。

我甚至没有考虑到迁移的问题,现在我只是对创建数据库对象感到好奇。我曾经走过你建议的类似道路,尽管在我的情况下一直在尝试ServiceStack.Ormlite。仅从方言支持方面来看,它似乎是值得投资的“冗余”工具。 - eddie.sholl
抱歉 - 当我说“迁移”时,我指的是EF根据一组面向对象关系生成SQL模式的能力。 - Isaac Abraham
哦,你是指“将类结构迁移到架构定义”,而不是“将数据库模式版本1迁移到2”?没问题。无论哪种方式,我希望能够找到一个“嘿,看看这篇很棒的博客文章/nuget包”的好方法,但似乎并不存在。 - eddie.sholl
我不确定这个神奇的解决方案会是什么样子,类型提供程序的整个重点在于您无需创建和维护工件类。我认为你提出的“使用另一个工具”的一般解决方案是可行的。 - eddie.sholl

0

我一直在尝试寻找解决方案,越来越倾向于回归 SQL 数据库的基础知识。重构数据库 这本书中描述的一个主要部分是迁移。拥有一个支持迁移工作的工具可以解决很多问题,只要你能接受用普通的 SQL 编写所有的上下脚本,这可能非常适合。

我发现 .NET 技术栈中的一个工具是 Rob Reynold 的 Roundhouse。我还没有尝试过它,但它似乎很有前途,尽管有些过时。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接