#c# #.net #sqlite #frameworks
#c# #.net #sqlite #рамки
Вопрос:
Мой вопрос в том, как заставить SQLite работать в .NET framework, версия 4.7 , точка и где расположение базы данных меняется с каждым сайтом клиента, на котором я устанавливаю?
Вопрос:
Моя проблема с SQLite в .NET framework заключается в том, что я продолжаю получать DLL для SQLite не найден или отсутствует фабрика БД. Потратив 3-4 дня на изучение i-сети и перепробовав различные варианты, я не нашел решения. Может быть, я тот самый 5-фунтовый молоток — стекольный завод 8).
Вот предыстория:
Требование заключается в том, что вызывающий/Хост-это приложение VBA, называемая «dll» должна соответствовать функциональности COM — интерфейса.
Я создал открытую библиотеку DLL .NET COM, которая получает доступ к данным из БД с помощью .NET framework 4.7.2, EF 6.4.4 и СУБД SQL Express 2019, которая отлично работает. Проблема заключается в том, что ИТ-отделы клиентов принимают решение.
Есть 2 базы данных, одна база данных-это много для чтения, ни одной записи с 7 таблицами, в одной таблице более 950 000 строк. В другой БД есть 2 таблицы, обе читают много, иногда пишут. Обе базы данных совместно используются несколькими рабочими станциями.
Цель состоит в том, чтобы заменить SQL Express на SQLite. Причина: SQLite является автономным, без участия ИТ для установки, за исключением предоставления прав на установку в первую очередь 8).
Попробовал исходный файл XML/Json с набором данных памяти, производительность была низкой при загрузке, 10-30 секунд, и столкнулся с ошибками «не хватает памяти» при тестировании с минимальными спецификациями ПК, которые я нахожу у клиентов.
Обнаружил, что я могу осуществлять доступ к данным с помощью .NET 5 или 6 с ядром EF. Я могу передать местоположение файла(ов) БД по мере необходимости (БД будет находиться в локальной папке или даже на общем файловом ресурсе сервера, отличном от моей библиотеки DLL). На это ушло меньше суток, чтобы приступить к работе. Загвоздка вот в чем .NET framework не может вызывать библиотеки DLL .NET в моем тестировании.
В .NET 6 я вызываю библиотеку классов следующим образом:
PostalDataLib tstDB = new(sysDBFQN, custDBFQN);
Конструктор выглядит так:
public PostalDataLib(string sysDbFQN, string cusDbFQN) { if (!File.Exists(sysDbFQN)) throw new ArgumentException("Invalid FQN, file not found", nameof(sysDbFQN)); if (!File.Exists(cusDbFQN)) throw new ArgumentException("Invalid FQN, file not found", nameof(cusDbFQN)); _custFQN = cusDbFQN; _sysFQN = sysDbFQN; _optsPostalData = new DbContextOptionsBuilderlt;PostalDBgt;().UseSqlite($"Data Source={sysDbFQN}").Options; _optsCustData = new DbContextOptionsBuilderlt;PostalCustDBgt;().UseSqlite($"Data Source={cusDbFQN}").Options; }
Затем я открываю БД(ы) следующим образом:
using PostalDB dbctx = new(_optsPostalData); using PostalCustDB dbctxcus = new(_optsCustData);
Но я, похоже, не могу сделать это работоспособным в .NET framework 4.7.2.