вторник, 8 декабря 2015 г.

Firebird Entity Framework 6 - DbContext

Добрый день.
Сегодня я вам расскажу как в свои проекты добавить поддержку Firebird через Entity Framework 6,

Для начала вам нужно скачать мою утилиту, которая прописывает библиотеки Firebird в Visual Studio 2015. Установите утилиту.



После установки, запускайте Visual Studio 2015 и создавайте новый проект Window Forms.


Добавьте ссылки на сборки Firebird в ваш проект.


Укажите файлы из той папки, в которую была установлена утилита.


Вы должны добавить 2 файла в ваш проект:
EntityFramework.Firebird.dll
FirebirdSql.Data.FirebirdClient.dll


Теперь нужно добавить пакет Nuget - EntityFramework




В итоге в вашем проекте должны быть такие сборки:


Теперь откройте файл app.config и закоментируйте все внутри тега <entityFramework>
И добавьте следующий текст:

    <defaultConnectionFactory type="FirebirdSql.Data.EntityFramework6.FbConnectionFactory, EntityFramework.Firebird" />
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      <provider invariantName="FirebirdSql.Data.FirebirdClient" type="FirebirdSql.Data.EntityFramework6.FbProviderServices, EntityFramework.Firebird" />
    </providers>

Должно получиться примерно как на картинке:

Сохраните и закройте файл.
Добавьте в проект новый элемент Модель EDM.


Выбираем Конструктор из базы данных


Нажимайте "Изменить"


Выбирайте Firebird Data Source


Указывайте параметры подключения к вашей базе данных.


Нажимайте точку и потом кнопку Далее.


Выбирайте таблицы, которые нужно загрузить в модель.


Поставьте флажок и нажмите ОК, иначе замучает.


Модель создана.


Как именно пользоваться моделью, я надеюсь рассказывать не надо. Или можно почитать об этом в сетях.

Надеюсь вы сможете оценить мою утилиту и данную статью.
Спасибо.

воскресенье, 29 ноября 2015 г.

Разработка приложения Silverlight с доступом к базе данных через Entity Framework 6 (DbContext)

В этой статье я бы хотел рассказать о том, как создать приложение Silverlight 5 и заставить его работать с DbContext. Данный опыт мне дался достаточно большими усилиями, т.к. организация доступа в Silverlight сильно усложнена, особенно через DbContext.

Создаем новое приложение Silverlight


Включим поддержку WCF RIA Services


На WEB проекте добавим новые сборки NuGet



Добавим пакет Entity Framework.
На данный момент актуальная версия 6.1.3


В строке поиска введем OpenRIA Server и добавим пакет в проект


Т.к. мы планируем использовать Entity framework 6 (DBContext) нужно добавить пакет OpernRIA DBContext


Добавим модель Entity


Выберем модель и нажмем OK


Укажем параметры подключения к вашей базе данных



Для примера я добавлю всего две таблицы в модель



Нажмите F6 чтобы построить проект
Далее выберите Сервис - Расширения и обновления, слева выберите пункт "В сети"
В строке поиска введите Open RIA


Нажмите кнопку "Загрузить"
После установки пакета перезапустите Visual Studio
В корень проекта Web добавьте папку Services
На этой папке нажмите правой кнопкой и выберите "Создать элемент"
Слева выберите "Веб" и найдите пункт "DomainService"


Поставьте галочки на ваших сущностях, которые вы хотите добавить, для того, чтобы были сгенерированы классы для редактирования, поставьте галочку "Enable editing".



В открывшемся файле закомментируйте строку System.Data


Нажмите F6 чтобы построить проект.
Добавим новый метод GetByUsersByName, который будет возвращать пользователя по его логину. После имени таблицы добавьте Include("UsersDomainLogins"). Это позволит загружать связанные элементы UserDomainLogins при загрузке сущности User.


Откроем файл DomainService1.metadata.cs, найдем там класс Users и свойство  UsersDomainLogins. Добавим атрибут [Include] к этому полю. Это позволит загружать связанные элементы UserDomainLogins при загрузке сущности User.


Нажмите F6 чтобы построить проект.
Выгрузите проект SilverlightApplication, нажмите на нем правой кнопкой и выберите "Изменить"


Найдите тег  переименуйте его в .


Сверните все группы, кроме предпоследней, которая содержит слово targets


Откроем папку с вашим проектом, в ней должна быть папка packages.
Откройте ее.


Откройте папку OpenRiaServices.Server, а в ней папку builds


Там должен быть файл targets


Если он есть, тогда добавьте строку:
Import Project="..\packages\OpenRiaServices.Client.CodeGen.4.4.1.0\build\OpenRiaServices.Client.CodeGen.targets" Condition="Exists('..\packages\OpenRiaServices.Client.CodeGen.4.4.1.0\build\OpenRiaServices.Client.CodeGen.targets')"


Эта строка позволит генерировать файлы сущностей на стороне клиента.
Сохраняем файл и перезагружаем проект.
Добавляем в проект Silverlight новый пакет.



Находим пакет OpenRia Client, который помечен как Full client.


Теперь нужно удалить ссылки на сборки:
System.ServiceModel.DomainServices.Client
System.ServiceModel.DomainServices.Client.Web


Перестроим проект
Нажмем кнопку "Показать все файлы" и откроем папку Generated_Code


Это означает, что Open RIA сгенерировал прокси классы наших сущностей на стороне клиента.
Откроем файл Home.cs и добавим в процедуру OnNavigatedTo немного кода.


Добавим код для загрузки данных с сервера.
И поставим несколько точек останова, чтобы убедиться, что все работает, как мы планировали. Сущность User подгружает связанные сущности UsersDomainLogins.


В данном примере я рассказал, как реализовать работу приложения Silverlight 5 с Entity Framework 5 посредством DbContext и с помощью Open RIA Services.
Данная технология пришла на смену WCF RIA Services которая не поддерживает Entity Framework 6 и даже 5.

На этом раскланиваюсь.