在参考to this question中,我需要与同事共享连接字符串,而不会将连接字符串推送到我们的存储库。使用F#SQL类型提供程序迫使我进行硬编码"我的代码中的连接字符串。虽然答案中提供的解决方法很有希望,但是有没有一种方法可以在没有类型提供者的情况下连接到dB?
我已经知道dB的架构/结构;还有其他方法可以连接吗?
答案 0 :(得分:3)
一种可能性是使用EdmxFile类型提供程序:
#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 }
您可以在Visual Studio中创建EDMX文件(从现有数据库或从头开始),方法是将新的“ADO.NET实体数据模型”项添加到C#项目,然后将其移动到F#项目。然后,设计器功能仍可在F#项目中使用。
在同一FSharp.Data.TypeProviders project内,存在DBML file,SqlData和SqlEntity类型提供商。后两者需要编译时连接字符串或名称,但支持脱机模式缓存。因此,您可以将缓存文件添加到源代码管理,然后更改连接字符串。
另一种选择是使用任何“实时”类型提供程序,但将其指向源控制的MDF文件:
let [<Literal>] LocalMDF =
"Server=.\SQLExpress;AttachDbFilename=.\MyDataFile.mdf;Database=dbname;Trusted_Connection=Yes;"
如果您对发布普通SQL 感兴趣,请查看SQL Client类型提供程序。它允许指定在设计时使用的.config
文件。
除此之外,还可以使用所有“非类型提供者”(不太方便,类型安全性较低)的标准.NET方法: