Одним из возможных вариантов является использование поставщика 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 }
Вы можете создать файл EDMX в Visual Studio (из существующей БД или с нуля), добавив новый «ADO.NET Entity Model Data» элемент в проект 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 подходы могут быть также использованы:
- ORMs (EF, NHibernate, Чудной,. ..)
Может потребоваться, не идиоматическое, многословный F # подражать C# классы
- ADO.NET
- Ручной Coding (SqlDataReader и соавторы)
- ...
* Использование оператора типа F # SQL приводит к «жесткому кодированию» строки подключения в моем коде *, это неверно, вы можете передать строку соединения во время выполнения. – DaveShaw
@DaveShaw строка подключения _data_, которую вы можете передать во время выполнения. Но строка _shape_ должна быть константой в исходном коде. –
Вам просто нужно изменить строку подключения во время выполнения, или, скорее, вы не хотите публиковать строку соединения в GitHub (ни время разработки, ни время выполнения)? Вы можете создать dll, содержащую логику подключения и нажать на свое репо. Если вы не используете поставщика типов, вы всегда можете подключиться через ADO. – s952163