2016-11-18 6 views
3

В ссылке to this question, мне нужно разделить строку соединения с коллегами без того, чтобы строка подключения была перенесена в наш репозиторий. Использование поставщика типа F # SQL заставляет меня «жестко кодировать» строку подключения в моем коде. Хотя обходное решение многообещающее, есть ли просто способ подключения к дБ без поставщика типа?Подключиться к базе данных SQL без поставщика SQL-типа?

Я уже знаю схему/структуру дБ; есть ли другой способ подключения?

+2

* Использование оператора типа F # SQL приводит к «жесткому кодированию» строки подключения в моем коде *, это неверно, вы можете передать строку соединения во время выполнения. – DaveShaw

+2

@DaveShaw строка подключения _data_, которую вы можете передать во время выполнения. Но строка _shape_ должна быть константой в исходном коде. –

+0

Вам просто нужно изменить строку подключения во время выполнения, или, скорее, вы не хотите публиковать строку соединения в GitHub (ни время разработки, ни время выполнения)? Вы можете создать dll, содержащую логику подключения и нажать на свое репо. Если вы не используете поставщика типов, вы всегда можете подключиться через ADO. – s952163

ответ

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 } 

Вы можете создать файл 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 и соавторы)
  • ...