Ответ 1
в f # it
use dbTrans = new con.BeginTransaction ()
и
use cmd = con.CreateCommand()
они будут уничтожены, когда ваша функция закончится
Я пытаюсь использовать System.Data.Sqlite
с F #. В С# у меня есть код типа
using (DbTransaction dbTrans = con.BeginTransaction()) {
using (SQLiteCommand cmd = con.CreateCommand()) {
//blahblah
}
dbTrans.Commit();
}
Но в F #, когда я использую аналогичные два using
выше, я получил ошибку the type bool is not compatible with the type IDisposable
...
EDIT Мне очень жаль моего вопроса. use
будет работать в случае F #. Я просто не знаю, как закрыть/удалить мои вопросы.
в f # it
use dbTrans = new con.BeginTransaction ()
и
use cmd = con.CreateCommand()
они будут уничтожены, когда ваша функция закончится
Чтобы добавить некоторые детали - если вам нужно явно указать область действия, где команда действительна (чтобы получить то же поведение, что и в примере на С#, где cmd
id удален до вызова Commit
), вы можете написать:
use dbTrans = con.BeginTransaction()
( use cmd = con.CreateCommand()
cmd.BlahBlahBlah() )
dbTrans.Commit()
Область видимости - это только часть выражения, где символ определен, поэтому вы можете сделать его явным с помощью круглых скобок.
using
- это просто функция F #, которую вы могли бы использовать до того, как был добавлен специальный синтаксис с использованием use
. Просто FYI, синтаксис выглядит следующим образом:
using (con.BeginTransaction()) (fun dbTrans ->
using (con.CreateCommand()) (fun cmd ->
cmd.BlahBlahBlah() )
dbTrans.Commit() )
Написание кода с помощью use
определенно является лучшей идеей (но вы можете определить свои функции, такие как using
, чтобы инкапсулировать более интересное поведение - например, транзакцию).