F# 是否在没有SQL类型提供程序的情况下连接到SQL数据库?

F# 是否在没有SQL类型提供程序的情况下连接到SQL数据库?,f#,type-providers,F#,Type Providers,在参考中,我需要与同事共享一个连接字符串,而不需要将该连接字符串推送到我们的存储库中。使用F SQL类型提供程序强制我在代码中硬编码连接字符串。尽管答案中提供的解决方案很有希望,但是否有一种方法可以在不使用类型提供程序的情况下连接到dB 我已经知道数据库的模式/结构;是否有其他连接方式?一种可能是使用类型提供程序: #I "../packages/FSharp.Data.TypeProviders/lib/net40" #r "System.Data.Entity" #r "FSharp.Dat

在参考中,我需要与同事共享一个连接字符串,而不需要将该连接字符串推送到我们的存储库中。使用F SQL类型提供程序强制我在代码中硬编码连接字符串。尽管答案中提供的解决方案很有希望,但是否有一种方法可以在不使用类型提供程序的情况下连接到dB


我已经知道数据库的模式/结构;是否有其他连接方式?

一种可能是使用类型提供程序:

#I "../packages/FSharp.Data.TypeProviders/lib/net40"
#r "System.Data.Entity"
#r "FSharp.Data.TypeProviders.dll"

open FSharp.Data.TypeProviders

type DB = EdmxFile<"MyDB.edmx">

let c = new DB.Model.ModelContainer("runtimeConnectionString")

query { for e in c.MyEntitySet do select e.Id }
通过将新的ADO.NET实体数据模型项添加到C项目,然后将其移动到F项目,可以在Visual Studio中从现有数据库或从头开始创建EDMX文件。设计器功能在F项目中仍然可用

在同一个数据库中,存在、和类型提供程序。后两者需要编译时连接字符串或名称,但也支持脱机模式缓存。因此,您可以将缓存文件添加到源代码管理中,然后更改连接字符串

另一种选择是使用任何活动类型提供程序,但将其指向受源代码控制的MDF文件:

let [<Literal>] LocalMDF =
    "Server=.\SQLExpress;AttachDbFilename=.\MyDataFile.mdf;Database=dbname;Trusted_Connection=Yes;"
如果您对发布普通SQL感兴趣,请查看类型提供程序。它允许指定设计时使用的.config文件

除此之外,还可以使用所有不太方便、不太安全的非类型提供程序标准.NET方法:

ORMs EF,NHibernate,整洁。。。 可能需要非惯用的、冗长的F来模仿C类 ADO.NET 手工编码SqlDataReader和associates ...
使用F SQL类型提供程序会强制我在代码中硬编码连接字符串。这不是真的,您可以在运行时传入连接字符串。@DaveShaw数据连接字符串,您可以在运行时传入。但是形状连接字符串在源代码中必须是常量。您是否只需要在运行时更改连接字符串,或者更确切地说,您不想在GitHub上公开连接字符串,无论是在设计时还是在运行时?您可以创建一个包含连接逻辑的dll,并将其推送到您的repo。如果您不想使用类型提供程序,则始终可以通过ADO进行连接。@FyodorSoikin-这基本上是正确的;-。例如,您可以轻松创建一个EnvironmentVariableTypeProvider,它将所有环境变量公开为文本,在这种情况下,您可以使用一个作为SQL类型提供程序的参数。@CaringDev连接字符串将位于我们所有机器上相同相对位置的安全同步文件夹中。