Entity framework 6, настройка підключення до бази даних

При роботі з Entity Framework у всіх попередніх прикладах ми покладалися на угоди Code-First по автоматичному визначенню підключення до бази даних. За замовчуванням, Code-First створює базу даних на локальному сервері. \ SQLEXPRESS, використовуючи повне ім'я класу контексту для імені бази даних (наприклад, простір імен + ім'я класу). Для прикладу нашого проекту це означає, що Code-First створить базу даних з ім'ям CodeFirst.SampleContext. Найчастіше це поведінка необхідно перевизначити, зокрема ми передавали ім'я бази даних MyShop в конструкторі класу контексту. У цій статті міститься докладний опис налаштувань імені бази даних і підключення до неї.

Використання конфігураційного файлу додатки

Найпростішим способом управління підключенням до бази даних є використання конфігураційного файлу додатки. У файлі конфігурації можна перевизначити базові угоди Code-First і точно вказати рядок підключення до бази даних. Цей підхід особливо корисний, якщо ви хочете змінити рядок підключення у вашому контексті, щоб вказати підключення до віддаленої (не локальною) базі даних при розгортанні програми.

Завдяки такому підходу забезпечується можливість багаторазового використання моделі даних. У кожному проекті, де ми посилаємося на проект CodeFirst, ми можемо вказати свій рядок підключення, тобто одна модель буде працювати з різними базами даних.

Для вказівки рядка підключення використовується розділ конфігурації connectionString. За замовчуванням, рядок підключення повинна мати те ж ім'я, що і файл контексту, при цьому можна вказати як повне ім'я так і короткий (тобто SampleContext або CodeFirst.SampleContext). Завдяки цьому, Entity Framework автоматично знайде потрібний рядок підключення в файлі конфігурації і використовує її. У прикладі нижче показано визначення рядка підключення:

Запустіть цей приклад і переконайтеся, що Code-First створить нову базу даних з ім'ям MyShop2 для поточної моделі. Якщо ви опрацьовували приклади з попередніх статей, то поки видаліть виклик конструктора базового класу з класу контексту. В результаті буде створена наступна база даних:

Entity framework 6, настройка підключення до бази даних

Налагодження підключення в конструкторі класу контексту

Вище ви бачили, як задати рядок підключення з файлу конфігурації так, що контекст буде використовувати її автоматично завдяки угодам Code-First. Тепер давайте подивимося на деякі способи управління підключенням до бази даних з коду.

Клас DbContext крім конструктора за замовчуванням включає в себе кілька перевантажених версій конструкторів. Якщо ви використовуєте один з цих конструкторів, Code-First не використовуватиме угоди для автоматичного пошуку рядка підключення. Найпростіша версія конструктора класу DbContext приймає один строковий параметр. Давайте подивимося як використовувати цей конструктор з похідного класу:

У цьому конструкторі передається або ім'я бази даних, або повністю певна рядок підключення. Entity Framework досить інтелектуальний, щоб розрізнити просто ім'я і рядок підключення, в даному прикладі ми вказуємо ім'я бази даних.

Зверніть увагу, що в цьому прикладі ми викликаємо перевантажений конструктор класу DbContext з конструктора за замовчуванням похідного класу SampleContext. При такому підході до проектування, коли ви створюєте об'єкт контексту в вашому додатку, рядок підключення буде автоматично вибиратися з конструктора за замовчуванням класу SampleContext. Іноді буває необхідно вказати рядок підключення при створенні об'єкта контексту. Для цього можна додати перевантажений конструктор в клас контексту з викликом перевантаженого конструктора DbContext:

Тепер в коді роботи з даними, при створенні об'єкта класу контексту ви можете вказувати ім'я бази даних або рядок підключення:

У цьому прикладі витягуються дані всіх покупців з таблиці Customers бази даних MyShop2, тому що ми вказали повну рядок підключення до цієї бази даних. Якщо в даному прикладі ви створите об'єкт контексту з використанням конструктора за замовчуванням:

то Code-First використовує угоди з автоматичного пошуку рядка підключення, і, якщо не знайде рядок підключення з ім'ям SampleContext або CodeFirst.SampleContext, то спробує підключитися до бази даних з ім'ям CodeFirst.SampleContext.

У вас також може виникнути питання, як явно передати конструктору класу контексту ім'я рядка підключення, якщо воно не збігається з назвою класу контексту. Для цього можна використовувати скорочену рядок підключення з єдиним параметром name:

Тепер Code-First буде шукати в конфігураційному файлі рядок підключення з ім'ям MyConnectionStringName.

Повторне використання підключення до бази даних

Одна з перевантажених версій конструктора DbContext приймає об'єкт підключення DbConnection з простору імен System.Data.Common. Використання цього об'єкта може бути корисно, якщо ви хочете вказати в декількох об'єктах контексту один і той же об'єкт підключення і не хочете кожен раз вказувати ім'я бази даних або рядка підключення. Тобто об'єкт DbConnection може зберігатися в певному місці програми та ви можете посилатися на нього щоразу, коли створюєте об'єкт контексту. Нижче показаний приклад:

У цьому прикладі ми створили клас DbConnectionToMyShop, для підключення до бази даних MyShop. Об'єкт цього класу передається в конструкторі за замовчуванням класу контексту. Ми також створили для зручності перевантажений конструктор - в коді програми ви можете просто передати потрібний об'єкт підключення. Класи підключень можна визначити в одному файлі і потім використовувати повсюдно в додатку. Другий параметр в цьому конструкторі contextOwnsConnection вказує, чи потрібно очищати об'єкт підключення при видаленні об'єкта контексту.

Налаштування угод підключення в Code-First

Останнім способом управління підключенням до бази даних, є заміна угод, які використовує Code-First. Угоди по конфігурації підключення визначаються за допомогою інтерфейсу IDbConnectionFactory. Ви можете реалізувати цей інтерфейс і передати його методу SetDefaultConnectionFactory () класу DbConfiguration. перевизначивши тим самим угоди за замовчуванням Code-First.

Угоди за замовчуванням реалізує клас SqlConnectionFactory з простору імен System.Data.Entity.Infrastructure. Поведінка за замовчуванням визначає, що постачальником бази даних буде постачальник SQL Server (збірка System.Data.SqlClient), ім'я сервера -. \ SQLEXPRESS, а для доступу до сервера використовується Windows-аутентифікація (сервер доступний для поточного користувача системи). Ви можете перевизначити дані угоди, наприклад, для того, щоб явно вказати Entity Framework що ви хочете працювати з постачальником MySQL.

У прикладі нижче показано, як перевизначити ці угоди, використовуючи клас конфігурації, успадкований від DbConfiguration:

У цьому прикладі ми змінюємо ім'я сервера, а також вказуємо, що для доступу до сервера повинна використовуватися SQL-аутентифікація, на основі імені користувача та пароля. Зверніть увагу, щоб вказати класу контексту, щоб він використовував цю конфігурацію, використовується атрибут DbConfigurationType. Щоб зареєструвати новий клас конфігурації, в файлі Web.config веб-додатки потрібно видалити розділ defaultConnectionFactory:

Також ви можете встановити конфігурацію для всіх класів контексту в додатку і не використовувати атрибут DbConfigurationType. Для цього вкажіть властивість codeConfigurationType розділу конфігурації entityFramework:

У прикладах вище показано використання стандартного постачальника даних SQL Server, але ви можете вказати інші постачальники баз даних, які потрібні у вашому додатку (MySQL, Oracle і т.п.)

Схожі статті