没有SQL类型提供程序连接到SQL数据库?

时间:2016-11-18 20:26:56

标签: f# type-providers

在参考to this question中,我需要与同事共享连接字符串,而不会将连接字符串推送到我们的存储库。使用F#SQL类型提供程序迫使我进行硬编码"我的代码中的连接字符串。虽然答案中提供的解决方法很有希望,但是有没有一种方法可以在没有类型提供者的情况下连接到dB?

我已经知道dB的架构/结构;还有其他方法可以连接吗?

1 个答案:

答案 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 fileSqlDataSqlEntity类型提供商。后两者需要编译时连接字符串或名称,但支持脱机模式缓存。因此,您可以将缓存文件添加到源代码管理,然后更改连接字符串

另一种选择是使用任何“实时”类型提供程序,但将其指向源控制的MDF文件:

let [<Literal>] LocalMDF =
    "Server=.\SQLExpress;AttachDbFilename=.\MyDataFile.mdf;Database=dbname;Trusted_Connection=Yes;"

如果您对发布普通SQL 感兴趣,请查看SQL Client类型提供程序。它允许指定在设计时使用的.config文件。

除此之外,还可以使用所有“非类型提供者”(不太方便,类型安全性较低)的标准.NET方法:

  • ORMs(EF,NHibernate,Dapper,...)
    可能需要非惯用的,冗长的F#来模仿C#类
  • ADO.NET
  • 手工编码(SqlDataReader及其同事)
  • ...