Я пытаюсь отделить часть базы данных моего C # WPF-приложения , чтобы я мог использовать его в нескольких проектах, но не могу понять, как это сделать, не повторяя где-то код.
Текущее состояние:
- Настольное WPF-приложение Windows, один проект в одном решении
- В проекте установлен пакет EntityFramework 6.3 , установленный в NuGet
- SQL Server Express , работающий на том же ноутбуке
- База данных была разработана непосредственно в
SSMS
и преобразована в POCOs
посредством следующего процесса: Add -> New Item -> Data -> ADO.NET Entity Data Model -> Code First from Database -> Choose connection string -> Choose database objects
. Это создает файл .edmx
с некоторыми другими файлами под ним, включая файл .tt
, который я могу развернуть, чтобы увидеть все мои объекты - В редких случаях, когда мне нужно изменить базу данных, я делаю это в
SSMS
, а затем снова выполните описанный выше процесс для обновления объектов в приложении
Это приложение работает хорошо. Но я хотел бы отделить базу данных, чтобы она могла работать на другом компьютере, либо у меня дома, либо в облаке, чтобы я мог писать веб-или мобильные клиенты, которые используют ту же базу данных, из другого места. Однако я не могу понять, как удалить только часть базы данных из моего приложения WPF, не создавая других проблем.
Я представляю ситуацию, когда база данных работает на компьютере с веб-службой RESTful. сидит поверх него, и исходное приложение модифицируется для доступа к веб-службе, а не напрямую к БД.
Так что, возможно, сам проект веб-службы - это то место, где я бы использовал EF6 чтобы получить доступ к базе данных и преобразовать ее в сущности, чтобы я мог получать сущности через веб-сервис и вставлять / обновлять их в базе данных. Это имеет смысл.
В этом случае исходному приложению WPF больше не нужно будет устанавливать EF6 или какие-либо строки подключения или что-либо связанное с базой данных, но ему все равно нужно будет знать обо всех объектах, которые имеютбыл сгенерирован из базы данных, потому что ему все равно придется создавать эти объекты для отправки их при вызове веб-службы.
Так что я могу создать entities
из базы данных в проекте, а затем скопировать тот же entities
в другой проект? Это похоже на дублирование кода. Если бы я изменил БД, мне пришлось бы обновлять entities
отдельно в каждом проекте. Или я делаю проект "entities"
, к которому я получаю доступ от других с помощью директивы "using"
? Или сделать библиотеку классов .dll
? Я предполагаю, что один из последних подойдет, но я немного растерялся, как к этому подойти. Или, может быть, это требует более глубокого переосмысления?