Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Краткие теоретические сведения




Чтобы начать работу с Entity Framework, необходимо создать приложение. В качестве среды разработки можно использовать Visual Studio 2013 или Visual Studio 2013 Express for Desktop.

Создайте новый проект по типу Console Application (рисунок Б.2).

Рисунок Б.2 – Новый проект

Добавьте новый класс, который будет описывать данные. Допустим, приложение будет посвящено работе с пользователями: класс User:

1 2 3 4 5 6 public class User { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } }

Это обычный класс, который содержит некоторое количество автосвойств. Каждое свойство будет сопоставляться с отдельным столбцом в таблице из базы данных.

Надо отметить, что Entity Framework при работе с Code First требует определения ключа элемента для создания первичного ключа в таблице в базе данных. По умолчанию при генерации базы данных Entity Framework в качестве первичных ключей будет рассматривать свойства с именами Id или [Имя_класса]Id (то есть UserId). Если ключевое свойство называется иначе, то необходимо внести дополнительную логику на С#.

Для взаимодействия с базой даных нужен контекст данных. Это своего рода посредник между базой данных и классами, описывающими данные. По умолчанию библиотека для EF еще не добавлена. Чтобы ее добавить, необходимо выбрать в контекстном меню решения Manage NuGet Packages...

Затем в появившемся окне управления NuGet-пакетами в окне поиска ввести слово "Entity", выбрать пакет Entity Framework и установить его (рисунок Б.3).

Рисунок Б.3 – Установка Entity Framework

После установки пакета добавить в проект новый класс UserContext:

using System; using System.Collections.Generic; using System.Data.Entity; namespace FirstEF6App { class UserContext: DbContext { public UserContext() :base("DbConnection") { } public DbSet<User> Users { get; set; } } }

Основу функциональности Entity Framework составляют классы, находящиеся в пространстве имен System.Data.Entity. Среди всего набора классов этого пространства имен следует выделить следующие:

  • DbContext : определяет контекст данных, используемый для взаимодействия с базой данных.
  • DbModelBuilder : сопоставляет классы на языке C# с сущностями в базе данных.
  • DbSet/DbSet<TEntity> : представляет набор сущностей, хранящихся в базе данных

В любом приложении, работающим с базой данных через Entity Framework, необходим контекст (класс производный от DbContext) и набор данных DbSet, через который осуществляется взаимодействие с таблицами из базы данных. В данном случае таким контекстом является класс UserContext.

В конструкторе этого класса вызывается конструктор базового класса, в который передается строка "DbConnection" - это имя будущей строки подключения к базе данных. В принципе можно не использовать конструктор, тогда в этом случае строка подключения будет носить имя самого класса контекста данных.

В классе определено одно свойство Users, которое будет хранить набор объектов User. В классе контекста данных набор объектов представляет класс DbSet<T>. Через это свойство будет осуществляться связь с таблицей объектов User с базой данных.

Необходимо установить подключение к базе данных. Для установки подключения обычно используется файл конфигурации приложения. В проектах для десктопных приложений файл конфигурации называется App.config (как в нашем случае), в проектах веб-приложений - web.config. В данном случае это файл App.config. После добавления Entity Framework он выглядит примерно следующим образом:

<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> </configSections> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> </providers> </entityFramework> </configuration>

После закрывающего тега </configSections> необходимо добавить следующий элемент:

<connectionStrings> <add name="DBConnection" connectionString="data source=(localdb)\v11.0;Initial Catalog=userstore.mdf;Integrated Security=True;" providerName="System.Data.SqlClient"/> </connectionStrings>

Все подключения к источникам данных устанавливаются в секции connectionStrings, а каждое отдельное подключение представляет элемент add. В конструкторе класса контекста UserContext в качестве названия подключения передается строка "DbConnection", поэтому данное название указывается в атрибуте name="DBConnection".

Настройку строки подключения задает атрибут connectionString. В данном случае устанавливается название базы данных, с которой будет осуществляться взаимодействие - userstore.mdf.

Теперь необходимо перейти к файлу Program.cs и изменить его содержание следующим образом:

using System; namespace FirstEF6App { class Program { static void Main(string[] args) { using(UserContext db = new UserContext()) { // создаем два объекта User User user1 = new User { Name = "Tom", Age = 33 }; User user2 = new User { Name = "Sam", Age = 26 }; // добавляем их в бд db.Users.Add(user1); db.Users.Add(user2); db.SaveChanges(); Console.WriteLine("Объекты успешно сохранены"); // получаем объекты из бд и выводим на консоль var users = db.Users; Console.WriteLine("Список объектов:"); foreach(User u in users) { Console.WriteLine("{0}.{1} - {2}", u.Id, u.Name, u.Age); } } Console.Read(); } } }

Так как класс UserContext через родительский класс DbContext реализует интерфейс IDisposable, то для работы с UserContext с автоматическим закрытием данного объекта можно использовать конструкцию using.

В конструкции using создаются два объекта User и добавляются в базу данных. Для их сохранения достаточно использовать метод Add: db.Users.Add(user1)

Чтобы получить список данных из базы данных, достаточно воспользоваться свойством Users контекста данных: db.Users

В результате после запуска программа выведет на консоль:

Объекты успешно сохранены

Список объектов:

1.Tom - 33

2.Sam - 26

Таким образом, Entity Framework обеспечивает простое и удобное управление объектами из базы данных. При том в данном случае нет необходимости даже создавать базу данных и определять в ней таблицы. Entity Framework это сделает на основе определения класса контекста данных и классов моделей. И если база данных уже имеется, то EF не будет повторно создавать ее.

Основная задача - только определить модель, которая будет храниться в базе данных, и класс контекста. Поэтому данный подход называется Code First - сначала пишется код, а потом по нему создается база данных и ее таблицы.

Возникает вопрос, а где же находится база данных? Чтобы физически увидеть базу данных, можно подключиться к ней из Visual Studio через окно Database Explorer или через специальный инструмент управления SQL Server Management Studio.

Для просмотра базы данных через Visul Studio необходимо выбрать в меню пункт View->Other Windows->Database Explorer. В окне Database Explorer необходимо подключиться к новой базе данных, выбрав Connect to Database.

В окне добавления подключения указывается сервер (localdb)\v11.0 и название базы данных.

Физически база данных будет располагаться в каталоге SQL Servera, например, C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA , только назваться она будет по названию подключения - DbConnection.mdf.

При создании таблиц и их столбцов в базе данных в Entity Framework по умолчанию действуют некоторые соглашения по именованию, которые указывают, какие имена должны быть у таблиц, столбцов, какие типы и т.д. Рассмотрим некоторые из этих соглашений.

Типы SQL Server и C# сопоставляются следующим образом:

- int: int

- bit: bool

- char: string

- date: DateTime

- datetime: DateTime

- datetime2: DateTime

- decimal: decimal

- float: double

- money: decimal

- nchar: string

- ntext: string

- numeric: decimal

- nvarchar: string

- real: float

- smallint: short

- text: string

- tinyint: byte

- varchar: string

Все первичные ключи по умолчанию имеют определение NOT NULL.

Столбцы, сопоставляемые со свойствами ссылочных типов (string, array), в базе данных имеют определение NULL, а все значимые типы (DateTime, bool, char, decimal, int, double, float) - NOT NULL.

Если свойство имеет тип Nullable<T>, то оно сопоставляется со столбцом с определением NULL.

Entity Framework требует наличия первичного ключа, так как это позволяет ему отслеживать объекты. По умолчанию в качестве ключей EF рассматривает свойства с именем Id или [Название_типа]Id (например, PostId в классе Post).

Как правило, ключи имеют тип int или GUID, но также могут представлять и любой другой примитивный тип.

С помощью специального класса PluralizationService Entity Framework проводит сопоставление между именами классов моделей и именами таблиц. При этом таблицы получают по умолчанию в качестве названия множественное число в соответствии с правилами английского языка, например, класс User - таблица Users, класс Person - таблица People (но не Persons!).

Названия столбцов получают названия свойств модели.

Если нас не устраивают названия таблиц и столбцов по умолчанию, то мы можем переопределить данный механизм с помощью Fluent API или аннотаций.

4 Отчет и контрольные вопросы

 

Отчет составляется в текстовом редакторе, содержит исходные данные, результаты выполнения заданий и ответы на поставленные вопросы.

Защита лабораторной работы проводится на основании представленного отчета и контрольных вопросов из следующего списка:

1) Дайте определение Entity Framework. Назовите преимущества.

2) В чем заключаются особенности Entity Framework Code First?

3) Назовите этапы создания базы данных на основе Entity Framework Code First.

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...