F # - Какой ORM выбрать?

Я только начал играть с F # и задавался вопросом, есть ли там рекомендуемый ORM, для F #.

В С# я использовал NHibernate, который кажется довольно сложным и уродливым для реализации в F #. Я также подумал об использовании простого старого System.Data.SqlClient, но это похоже на возвращение в каменный век...

Любые предложения?

Ответ 1

Я использую поддержку F # для LINQ to SQL при работе над fssnip.net. Это нормально, когда вам нужно загружать, редактировать, вставлять объекты, и это нормально для написания простых запросов. Он имеет некоторые приятные аспекты, например. вы можете использовать сплайсинг для составления частей запроса.

Однако текущая реализация транслятора F # to LINQ не обрабатывает сложные запросы (вложенные вызовы функций, расширенные группировки и объединения), поэтому я написал несколько хранимых процедур. Они могут быть приятно вызваны сгенерированными объектами LINQ, но вам нужно написать некоторый SQL.

В качестве альтернативы, если вы хотите использовать старомодный SqlClient, вы можете сделать это лучше, используя динамический (?) оператор. Я написал об этом в этом сообщении в блоге. Для простых сценариев это может быть неплохой метод, потому что это очень просто.

Ответ 2

Это может отсутствовать точка (например, если это только для образования или удовольствия), но если вы уже знаете, как использовать ORM в С#, почему бы просто не сделать это на С# в качестве библиотеки, а затем сделать остальную часть логика в F #? Одной из основных точек продажи для языков .NET является интероперабельность.

Ответ 3

Я использую LINQ to SQL через F # PowerPack. Я использую ручное сопоставление (т.е. Создаю свой файл datacontext вручную, создавая классы POCO, а также записывая XML файл для определения макета моей базы данных). Кажется, он хорошо работает в F # из того, что я сделал до сих пор.

Ответ 4

Возможны два варианта взаимодействия с базами данных с использованием F #: FSharp.Data.SqlClient и SQLProvider.