#c# #sql #sqlite #system.data.sqlite
Вопрос:
У меня есть настольное приложение c#, хранящееся в репозитории git, вместе с файлом SQLite .db.
файл SQLite .db находится в ./Data/mydb.db
(относительно корневого каталога проекта). Эта папка является частью репозитория git
Внутри приложения моя строка подключения указывает на указанное выше местоположение. База данных является частью проекта VS, ее действие сборки настроено на содержимое, а параметр копирования установлен на копирование, если он новее.
Однако при отладке приложения любые операции CRUD, выполняемые внутри приложения, сохраняются не в ./Data/mydb.db
, а в ./bin/Data/mydb.db
.
Это работает при локальной отладке, но это также означает, что ни одна из строк, вставленных из приложения, фактически не изменяет исходный файл, и, таким образом, git не обнаруживает никаких изменений, поэтому он не отправляет новейший файл бд в репозиторий. ./bin
не является частью репозитория git по очевидным причинам, поэтому, если я хочу работать над проектом с другого компьютера, я получаю не последнюю версию базы данных, а версию по умолчанию без вставленных строк.
Это также беспокоит меня, так как я планирую добавить функцию резервного копирования в облаке в будущем, поэтому мне нужно изменить исходный файл, потому что именно из него будет создана резервная копия. Кроме того, я не уверен, будет ли это означать, что, как только приложение будет упаковано и будет создан установщик, оно действительно будет сохранять данные в базе данных.
Это один из методов сохранения, который я использую. Есть ли что-то, что я мог бы добавить здесь, чтобы исходный файл БД действительно был изменен? Или любой другой обходной путь, который я мог бы сделать?
public void SaveBaseIngredient(BaseIngredient pBaseIngredient) { try { using(var conn = new SQLiteConnection(GetConnectionString())) { var saveIngredientCommand = new SQLiteCommand("INSERT INTO INGREDIENT (NAME, UNIT_OF_MEASURE) VALUES ($pName, $pUnit)", conn); saveIngredientCommand.Parameters.AddWithValue("pName", pBaseIngredient.Name.ToUpper()); saveIngredientCommand.Parameters.AddWithValue("pUnit", pBaseIngredient.MeasuringUnit.ToUpper()); conn.Open(); var x = saveIngredientCommand.ExecuteNonQuery(); } } catch (SQLiteException sqlEx) { Console.WriteLine(sqlEx.Message); Console.WriteLine(sqlEx.ErrorCode); throw sqlEx; } catch (Exception ex) { Console.WriteLine(ex.Message); throw ex; } }