Я сделал некоторый поиск и также считал FAQ на сайте SQLite, никакая удача, находящая ответ на мой вопрос.
Могло очень хорошо случиться так, что мой подход базы данных испорчен, но в данный момент, я хотел бы хранить свои данные в нескольких базах данных SQLite3, так, чтобы средства разделили файлы. Я очень взволнован о повреждении данных из-за моего приложения, возможно отказывающего или перебоя в питании посреди изменяющихся данных в моих таблицах.
Для обеспечения целостности данных я в основном должен сделать это:
begin transaction
modify table(s) in database #1
modify table(s) in database #2
commit, or rollback if error
Это поддерживается SQLite? Кроме того, я использую sqlite.net, конкретно последнее, которое основано на SQLite 3.6.23.1.
ОБНОВЛЕНИЕ
Еще один вопрос - является этим что-то, что люди обычно добавляли бы к своим модульным тестам? Я всегда тестовые базы данных единицы, но никогда не имели случая как это. И если так, как Вы сделали бы это? Это почти похоже на Вас, должны передать другой параметр методу как bool test_transaction, и если это верно, выдайте исключение между доступами базы данных. Затем тест после вызова для проверки первого набора данных не превращал его в другую базу данных. Но возможно это - что-то, что это покрыто тестами SQLite и не должно появляться в моих тестовых сценариях.
Да, транзакции работают с разными базами данных sqlite и даже между sqlite и sqlserver. Пару раз пробовал.
Некоторые ссылки и информация
Отсюда - Транзакция между различными источниками данных.
Поскольку поставщик SQLite ADO.NET 2.0 поддерживает регистрацию транзакций, можно не только выполнять транзакцию, охватывающую несколько источников данных SQLite, но также и другие механизмы базы данных, такие как SQL Server.
Пример:
using (DbConnection cn1 = new SQLiteConnection(" ... ") )
using (DbConnection cn2 = new SQLiteConnection(" ... "))
using (DbConnection cn3 = new System.Data.SqlClient.SqlConnection( " ... ") )
using (TransactionScope ts = new TransactionScope() )
{
cn1.Open(); cn2.Open(); cn3.Open();
DoWork1( cn1 );
DoWork2( cn2 );
DoWork3( cn3 );
ts.Complete();
}
Как присоединить новую базу данных:
SQLiteConnection cnn = new SQLiteConnection("Data Source=C:\\myfirstdatabase.db");
cnn.Open();
using (DbCommand cmd = cnn.CreateCommand())
{
cmd.CommandText = "ATTACH DATABASE 'c:\\myseconddatabase.db' AS [second]";
cmd.ExecuteNonQuery();
cmd.CommandText = "SELECT COUNT(*) FROM main.myfirsttable INNER JOIN second.mysecondtable ON main.myfirsttable.id = second.mysecondtable.myfirstid";
object o = cmd.ExecuteScalar();
}