SlideShare a Scribd company logo
Темы лекции: Entity Framework.
Практическое задание: Entity Framework.
Тренер: Игорь Шкулипа, к.т.н.
Разработка Веб-приложений на платформе
Microsoft .NET Framework.
Занятие 4
http://www.slideshare.net/IgorShkulipa 2
ORM
ORM (англ. Object-relational mapping, рус. Объектно-реляционное
отображение) — технология программирования, которая связывает
базы данных с концепциями объектно-ориентированных языков
программирования, создавая «виртуальную объектную базу данных».
Суть проблемы, которая решается с помощью ORM-слоя, заключается в
необходимости преобразования объектных структур в памяти
приложения в форму, удобную для сохранения в реляционных базах
данных, а также для решения обратной задачи — развертывания
реляционной модели в объектную, с сохранением свойств объектов и
отношений между ними.
Entity Framework представляет специальную объектно-
ориентированную технологию на базе .NET для работы с данными.
Если традиционные средства ADO.NET позволяют создавать
подключения, команды и прочие объекты для взаимодействия с
базами данных, то EF представляет собой более высокий уровень
абстракции, который позволяет абстрагироваться от самой базы
данных и работать с данными независимо от типа хранилища. если на
физическом уровне мы оперируем таблицами, индексами, первичными
и внешними ключами, но на концептуальном уровне, который нам
предлагает EF, мы уже работаем с объектами.
http://www.slideshare.net/IgorShkulipa 3
Entity Framework
Центральной концепцией Entity Framework является понятие сущности
или entity. Сущность представляет набор данных, ассоциированных с
определенным объектом. Поэтому данная технология предполагает
работу не с таблицами, а с объектами и их наборами.
Любая сущность, как и любой объект из реального мира, обладает рядом
свойств. Свойства не обязательно представляют простые данные типа
int, но и могут представлять более комплексные структуры данных. И
у каждой сущности может быть одно или несколько свойств, которые
будут отличать эту сущность от других и будут уникально определять
эту сущность. Подобные свойства называют ключами.
При этом сущности могут быть связаны ассоциативной связью один-ко-
многим, один-ко-одному и многие-ко-многим, подобно тому, как в
реальной базе данных происходит связь через внешние ключи.
Отличительной чертой Entity Framework является использование
запросов LINQ для выборки данных из БД. С помощью LINQ мы
можем не только извлекать определенные строки, хранящие объекты,
из БД, но и получать объекты, связанные различными ассоциативными
связями.
http://www.slideshare.net/IgorShkulipa 4
Entity Data Model
Другим ключевым понятием является Entity Data Model. Эта модель
сопоставляет классы сущностей с реальными таблицами в БД.
Entity Data Model состоит из трех уровней: концептуального, уровень
хранилища и уровень сопоставления (маппинга).
• На концептуальном уровне происходит определение классов
сущностей, используемых в приложении.
• Уровень хранилища определяет таблицы, столбцы, отношения
между таблицами и типы данных, с которыми сопоставляется
используемая база данных.
• Уровень сопоставления (маппинга) служит посредником между
предыдущими двумя, определяя сопоставление между свойствами
класса сущности и столбцами таблиц.
Таким образом, мы можем через классы, определенные в приложении,
взаимодействовать с таблицами из базы данных.
http://www.slideshare.net/IgorShkulipa 5
Способы взаимодействия с БД
Entity Framework предполагает три возможных способа взаимодействия с
базой данных:
• Database first: Entity Framework создает набор классов,
которые отражают модель конкретной базы данных
• Model first: сначала разработчик создает модель базы данных,
по которой затем Entity Framework создает реальную базу данных
на сервере.
• Code first: разработчик создает класс модели данных, которые
будут храниться в БД, а затем Entity Framework по этой модели
генерирует базу данных и ее таблицы
http://www.slideshare.net/IgorShkulipa 6
Создание запросов
Чтобы эффективно работать с Entity Framework нужно в первую очередь
знать, как выполнять запросы к хранилищу данных с использованием
EF. Хотя к счастью в Entity Framework создавать запросы очень легко,
так как в основном для этого применяются методы LINQ, которые
напоминают SQL-выражения.
Вначале производится общий запрос к хранилищу данных. Затем
свойство объекта представляет объект-коллекцию DbSet и возвращает
объект IEnumerable<T>. То есть мы можем получить все объекты из
таблицы, например, следующим образом:
IEnumerable<SomeTable> someTable = tableContainer.SomeTable;
foreach(var st in someTable )
{
Console.WriteLine(st.Name);
}
http://www.slideshare.net/IgorShkulipa 7
Взаимодействие с данными. Подход Model First
http://www.slideshare.net/IgorShkulipa 8
Model First
http://www.slideshare.net/IgorShkulipa 9
Model First
http://www.slideshare.net/IgorShkulipa 10
Model First
http://www.slideshare.net/IgorShkulipa 11
Model First
http://www.slideshare.net/IgorShkulipa 12
Model First
http://www.slideshare.net/IgorShkulipa 13
Model First
http://www.slideshare.net/IgorShkulipa 14
Model First
http://www.slideshare.net/IgorShkulipa 15
Model First
http://www.slideshare.net/IgorShkulipa 16
Model First
http://www.slideshare.net/IgorShkulipa 17
Code-First к существующей базе данных
Данный подход также представляет способ взаимодействия Code First,
однако база данных не генерируется автоматически, а создается
самим разработчиком. Иногда программисты называют данный подход
Code Second. Данный подход удобен, когда у нас уже есть база
данных.
http://www.slideshare.net/IgorShkulipa 18
Code-First к существующей базе данных
http://www.slideshare.net/IgorShkulipa 19
Database First
Database First был первым подходом, который появился в Entity
Framework. Данный подход во многом похож на Model First и подходит
для тех случаев, когда разработчик уже имеет готовую базу данных.
Чтобы Entity Framework мог получить доступ к базе данных, в системе
должен быть установлен соответствующий провайдер. Так, Visual
Studio уже поддерживает соответствующую инфраструктуру для СУБД
MS SQL Server. Для остальных СУБД, например, MySQL, Oracle и
других надо устанавливать соответствующие провайдеры.
http://www.slideshare.net/IgorShkulipa 20
Database First
http://www.slideshare.net/IgorShkulipa 21
Database First
http://www.slideshare.net/IgorShkulipa 22
Database First
http://www.slideshare.net/IgorShkulipa 23
Database First
http://www.slideshare.net/IgorShkulipa 24
Database First
http://www.slideshare.net/IgorShkulipa 25
Database First
Текст
http://www.slideshare.net/IgorShkulipa 26
Строка подключения
Иногда может потребоваться динамически изменять местоположение или
название базы данных, к которой идет подключения. В этом случае
нам надо указать стрку подключения. По умолчанию Visual Studio
добавляет в проекты файл конфигурации. В проектах для десктопных
приложений этот файл называется App.config, в проектах веб-
приложений это файл Web.config. Но вне зависимости от типа проекта
файл конфигурации имеет определенную структуру и элементы, среди
которых также есть также элемент connectionStrings, определяющий
строки подключения.
http://www.slideshare.net/IgorShkulipa 27
Навигационные свойства
public partial class Person
{
public Person()
{
this.Team = new HashSet<Team>();
}
public int PID { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public string Middle { get; set; }
public System.DateTime Birthday { get; set; }
public string Address { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
//Навигационные свойства задают связи между таблицами
public virtual Position Position { get; set; }
public virtual ICollection<Team> Team { get; set; }
}
http://www.slideshare.net/IgorShkulipa 28
Связь один ко многим
public partial class Person
{
public Person()
{
this.Team = new HashSet<Team>();
}
public int PID { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public string Middle { get; set; }
public System.DateTime Birthday { get; set; }
public string Address { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
public virtual Position Position { get; set; }
public virtual ICollection<Team> Team { get; set; }
}
public partial class Position
{
public Position()
{
this.Person = new HashSet<Person>();
}
public int POSID { get; set; }
public string PName { get; set; }
public virtual ICollection<Person> Person { get; set; }
}
http://www.slideshare.net/IgorShkulipa 29
Связь многие ко многим
public partial class Person
{
public Person()
{
this.Team = new HashSet<Team>();
}
public int PID { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public string Middle { get; set; }
public System.DateTime Birthday { get; set; }
public string Address { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
public virtual Position Position { get; set; }
public virtual ICollection<Team> Team { get; set; }
}
public partial class Team
{
public Team()
{
this.Person = new HashSet<Person>();
}
public int TID { get; set; }
public string TName { get; set; }
public virtual ICollection<Person> Person { get; set; }
}
http://www.slideshare.net/IgorShkulipa 30
Основные операции с данными
Большинство операций с данными представляют собой CRUD-операции
(Create, Read, Update, Delete), то есть получение данных, создание,
обновление и удаление. Entity Framework позволяет легко производить
данные операции.
http://www.slideshare.net/IgorShkulipa 31
Паттерн «Репозиторий»
Одним из наиболее часто используемых паттернов при работе с данными
является паттерн Репозиторий.
Репозиторий позволяет абстрагироваться от конкретных подключений к
источникам данных, с которыми работает программа, и является
промежуточным звеном между классами, непосредственно
взаимодействующими с данными, и остальной программой.
http://www.slideshare.net/IgorShkulipa 32
Пример см. Занятие №3. Интерфейс
public interface IRepository<T>
{
void Insert(T entity);
void Delete(T entity);
void Update(T entity, T newValue);
IQueryable<T> Find(Expression<Func<T, bool>> predicate);
IQueryable<T> SelectAll();
void SubmitAll();
}
http://www.slideshare.net/IgorShkulipa 33
Реализация
public class Repository<T> : IRepository<T> where T : class {
protected DbContext DBContext;
public Repository(DbContext dataContext) {
DBContext = dataContext;
}
public void Insert(T entity) {
DBContext.Set<T>().Add(entity);
}
public void Delete(T entity) {
DBContext.Set<T>().Remove(entity);
}
public void Update(T entity, T newValue) {
var entry = DBContext.Entry<T>(entity);
entry.CurrentValues.SetValues(newValue);
entry.State = EntityState.Modified;
}
public IQueryable<T> Find(Expression<Func<T, bool>> predicate) {
return DBContext.Set<T>().Where(predicate);
}
public IQueryable<T> SelectAll() {
return DBContext.Set<T>();
}
public void SubmitAll() {
DBContext.SaveChanges();
}
}
http://www.slideshare.net/IgorShkulipa 34
Модифицированный контракт
[DataContract(Namespace = "WCFS1")]
public class Contact
{
[DataMember]
public string Name { get; set; }
[DataMember]
public string Middle { get; set; }
[DataMember]
public string Surname { get; set; }
[DataMember]
public DateTime Birthday { get; set; }
[DataMember]
public string Address { get; set; }
[DataMember]
public string Phone { get; set; }
[DataMember]
public string Email { get; set; }
[DataMember]
public string Position { get; set; }
[DataMember]
public List<string> Teams { get; set; }
}
http://www.slideshare.net/IgorShkulipa 35
Служба
public class Service1 : IService1
{
IRepository<Person> persons;
IRepository<Position> positions;
IRepository<Team> teams;
Model1Container model;
public Service1(){
model = new Model1Container();
persons = new Repository<Person>(model);
positions = new Repository<Position>(model);
teams = new Repository<Team>(model);
}
public List<string> GetNames(){
var p = persons.SelectAll();
var res = from pe in p.ToArray<Person>()
where true
select pe.Name;
return res.ToList<string>();
}
public Contact GetData(string name){
Contact res = new Contact();
var pers = from p in persons.SelectAll()
where p.Name == name
select p;
res.Name=pers.ToArray<Person>()[0].Name;
...
return res;
}
http://www.slideshare.net/IgorShkulipa 36
Модификация на клиенте.
public class ContactViewModel: INotifyPropertyChanged
{
...
public string DetailsText
{
get
{
string result= CurrentContact.Name + "n" +
CurrentContact.Middle + "n" +
CurrentContact.Surname + "n" +
CurrentContact.Birthday.ToString() + "n" +
CurrentContact.Address + "n" +
CurrentContact.Phone + "n" +
CurrentContact.Email + "n"+
CurrentContact.Position+"n";
if (CurrentContact.Teams!=null)
foreach (string t in CurrentContact.Teams)
{
result += t + "n";
}
return result;
}
}
}
http://www.slideshare.net/IgorShkulipa 37
Результат
http://www.slideshare.net/IgorShkulipa 38
Лабораторная работа №4.
Спроектировать и реализовать базу данных для лабораторной работы №3
с использованием Entity Framework и паттерна «Репозиторий».

More Related Content

What's hot

JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.Igor Shkulipa
 
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...Fedor Lavrentyev
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.Igor Shkulipa
 
Лекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, LoaderЛекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, LoaderАлександр Брич
 
Android - 13 - Database
Android - 13 - DatabaseAndroid - 13 - Database
Android - 13 - DatabaseNoveo
 
вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNGвебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNGAndrey Rebrov
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.Igor Shkulipa
 
C# Desktop. Занятие 15.
C# Desktop. Занятие 15.C# Desktop. Занятие 15.
C# Desktop. Занятие 15.Igor Shkulipa
 
Клиент-серверное взаимодействие под android в деталях
Клиент-серверное взаимодействие под android в деталяхКлиент-серверное взаимодействие под android в деталях
Клиент-серверное взаимодействие под android в деталяхKirill Zotin
 
Введение в Spring
Введение в SpringВведение в Spring
Введение в SpringUnguryan Vitaliy
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.Igor Shkulipa
 
создание живых сайтов
создание живых сайтовсоздание живых сайтов
создание живых сайтовmetaform
 
Basis.js – «под капотом»
Basis.js – «под капотом»Basis.js – «под капотом»
Basis.js – «под капотом»Roman Dvornov
 
Лекция #6. Введение в Django web-framework
Лекция #6. Введение в Django web-frameworkЛекция #6. Введение в Django web-framework
Лекция #6. Введение в Django web-frameworkЯковенко Кирилл
 
Java осень 2014 занятие 8
Java осень 2014 занятие 8Java осень 2014 занятие 8
Java осень 2014 занятие 8Technopark
 
Средства разработки web приложений (Web frameworks)
Средства разработки web приложений
(Web frameworks)Средства разработки web приложений
(Web frameworks)
Средства разработки web приложений (Web frameworks)Fedor Malyshkin
 
Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...metaform
 
Java осень 2014 занятие 7
Java осень 2014 занятие 7Java осень 2014 занятие 7
Java осень 2014 занятие 7Technopark
 

What's hot (20)

JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
 
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.
 
Лекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, LoaderЛекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, Loader
 
Android - 13 - Database
Android - 13 - DatabaseAndroid - 13 - Database
Android - 13 - Database
 
вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNGвебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.
 
C# Desktop. Занятие 15.
C# Desktop. Занятие 15.C# Desktop. Занятие 15.
C# Desktop. Занятие 15.
 
Клиент-серверное взаимодействие под android в деталях
Клиент-серверное взаимодействие под android в деталяхКлиент-серверное взаимодействие под android в деталях
Клиент-серверное взаимодействие под android в деталях
 
Введение в Spring
Введение в SpringВведение в Spring
Введение в Spring
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.
 
создание живых сайтов
создание живых сайтовсоздание живых сайтов
создание живых сайтов
 
Basis.js – «под капотом»
Basis.js – «под капотом»Basis.js – «под капотом»
Basis.js – «под капотом»
 
Лекция #6. Введение в Django web-framework
Лекция #6. Введение в Django web-frameworkЛекция #6. Введение в Django web-framework
Лекция #6. Введение в Django web-framework
 
Java осень 2014 занятие 8
Java осень 2014 занятие 8Java осень 2014 занятие 8
Java осень 2014 занятие 8
 
Zend Framework и Doctrine
Zend Framework и DoctrineZend Framework и Doctrine
Zend Framework и Doctrine
 
Средства разработки web приложений (Web frameworks)
Средства разработки web приложений
(Web frameworks)Средства разработки web приложений
(Web frameworks)
Средства разработки web приложений (Web frameworks)
 
Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...
 
Java осень 2014 занятие 7
Java осень 2014 занятие 7Java осень 2014 занятие 7
Java осень 2014 занятие 7
 
Лекция #7. Django ORM
Лекция #7. Django ORMЛекция #7. Django ORM
Лекция #7. Django ORM
 

Viewers also liked

Phát tướng - sướng hay bất thường
Phát tướng - sướng hay bất thườngPhát tướng - sướng hay bất thường
Phát tướng - sướng hay bất thườngbradly351
 
C++ Базовый. Занятие 17.
C++ Базовый. Занятие 17.C++ Базовый. Занятие 17.
C++ Базовый. Занятие 17.Igor Shkulipa
 
Опитът на глухите жени...
Опитът на глухите жени...Опитът на глухите жени...
Опитът на глухите жени...Petra Gantcheva
 
Characterization of the surface of a citrate reduced colloid optimized for us...
Characterization of the surface of a citrate reduced colloid optimized for us...Characterization of the surface of a citrate reduced colloid optimized for us...
Characterization of the surface of a citrate reduced colloid optimized for us...John Clarkson
 
62 khbt-da-s.o (calculation sheets-wwtp)1 f 42
62 khbt-da-s.o (calculation sheets-wwtp)1 f 4262 khbt-da-s.o (calculation sheets-wwtp)1 f 42
62 khbt-da-s.o (calculation sheets-wwtp)1 f 42Amin Zuraiqi
 
Production diary 14
Production diary 14Production diary 14
Production diary 14Laila Jaleel
 
power point of extra material about eye trauma
power point of extra material about eye traumapower point of extra material about eye trauma
power point of extra material about eye traumaEman Elnezami
 
Amarnath_Kushwaha_SWEngg_3yrs_exp_C_C++
Amarnath_Kushwaha_SWEngg_3yrs_exp_C_C++Amarnath_Kushwaha_SWEngg_3yrs_exp_C_C++
Amarnath_Kushwaha_SWEngg_3yrs_exp_C_C++Amar Kushwaha
 
C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.Igor Shkulipa
 
InPay SA Kongres Mobilny 2015
InPay SA Kongres Mobilny 2015InPay SA Kongres Mobilny 2015
InPay SA Kongres Mobilny 2015Lech Wilczynski
 
XDAQ
XDAQXDAQ
XDAQAF
 
Debian Installer Step by Step
Debian Installer Step by StepDebian Installer Step by Step
Debian Installer Step by StepAF
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.Igor Shkulipa
 
Mid map gaya belajar
Mid map gaya belajarMid map gaya belajar
Mid map gaya belajarsanty1301
 
16 FACTS ABOUT CHOCOLATE
16 FACTS ABOUT CHOCOLATE16 FACTS ABOUT CHOCOLATE
16 FACTS ABOUT CHOCOLATENisha Thinisha
 

Viewers also liked (20)

Phát tướng - sướng hay bất thường
Phát tướng - sướng hay bất thườngPhát tướng - sướng hay bất thường
Phát tướng - sướng hay bất thường
 
C++ Базовый. Занятие 17.
C++ Базовый. Занятие 17.C++ Базовый. Занятие 17.
C++ Базовый. Занятие 17.
 
Опитът на глухите жени...
Опитът на глухите жени...Опитът на глухите жени...
Опитът на глухите жени...
 
Characterization of the surface of a citrate reduced colloid optimized for us...
Characterization of the surface of a citrate reduced colloid optimized for us...Characterization of the surface of a citrate reduced colloid optimized for us...
Characterization of the surface of a citrate reduced colloid optimized for us...
 
62 khbt-da-s.o (calculation sheets-wwtp)1 f 42
62 khbt-da-s.o (calculation sheets-wwtp)1 f 4262 khbt-da-s.o (calculation sheets-wwtp)1 f 42
62 khbt-da-s.o (calculation sheets-wwtp)1 f 42
 
Catalog AdPro
Catalog AdProCatalog AdPro
Catalog AdPro
 
Production diary 14
Production diary 14Production diary 14
Production diary 14
 
InPay OpenReaktor
InPay OpenReaktorInPay OpenReaktor
InPay OpenReaktor
 
Updated Colorado Resume
Updated Colorado Resume Updated Colorado Resume
Updated Colorado Resume
 
power point of extra material about eye trauma
power point of extra material about eye traumapower point of extra material about eye trauma
power point of extra material about eye trauma
 
Amarnath_Kushwaha_SWEngg_3yrs_exp_C_C++
Amarnath_Kushwaha_SWEngg_3yrs_exp_C_C++Amarnath_Kushwaha_SWEngg_3yrs_exp_C_C++
Amarnath_Kushwaha_SWEngg_3yrs_exp_C_C++
 
Truly Verona
Truly VeronaTruly Verona
Truly Verona
 
C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.
 
InPay SA Kongres Mobilny 2015
InPay SA Kongres Mobilny 2015InPay SA Kongres Mobilny 2015
InPay SA Kongres Mobilny 2015
 
XDAQ
XDAQXDAQ
XDAQ
 
Debian Installer Step by Step
Debian Installer Step by StepDebian Installer Step by Step
Debian Installer Step by Step
 
MME 2016
MME 2016MME 2016
MME 2016
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.
 
Mid map gaya belajar
Mid map gaya belajarMid map gaya belajar
Mid map gaya belajar
 
16 FACTS ABOUT CHOCOLATE
16 FACTS ABOUT CHOCOLATE16 FACTS ABOUT CHOCOLATE
16 FACTS ABOUT CHOCOLATE
 

Similar to C# Web. Занятие 04.

C# Desktop. Занятие 01.
C# Desktop. Занятие 01.C# Desktop. Занятие 01.
C# Desktop. Занятие 01.Igor Shkulipa
 
Java осень 2013 лекция 8
Java осень 2013 лекция 8Java осень 2013 лекция 8
Java осень 2013 лекция 8Technopark
 
Ado.net module 6 entity framework
Ado.net module 6 entity frameworkAdo.net module 6 entity framework
Ado.net module 6 entity frameworkAndrii Hladkyi
 
Как пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftКак пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftAnton Loginov
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Javametaform
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Javametaform
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.Igor Shkulipa
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NETVitaly Baum
 
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Andrey Rebrov
 
IOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows AzureIOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows AzureVadim Novitskiy
 
C# Desktop. Занятие 12.
C# Desktop. Занятие 12.C# Desktop. Занятие 12.
C# Desktop. Занятие 12.Igor Shkulipa
 
Java осень 2012 лекция 8
Java осень 2012 лекция 8Java осень 2012 лекция 8
Java осень 2012 лекция 8Technopark
 
Приложения для Windows Phone: как мы это делаем #codefest
Приложения для Windows Phone: как мы это делаем #codefestПриложения для Windows Phone: как мы это делаем #codefest
Приложения для Windows Phone: как мы это делаем #codefestActis Wunderman
 
Java осень 2012 лекция 9
Java осень 2012 лекция 9Java осень 2012 лекция 9
Java осень 2012 лекция 9Technopark
 
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKПрограммируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKCisco Russia
 
Mikhail Valkov_Antipatterns
Mikhail Valkov_AntipatternsMikhail Valkov_Antipatterns
Mikhail Valkov_AntipatternsCiklum
 
паттерны программирования
паттерны программированияпаттерны программирования
паттерны программированияguestfc8ae0
 
Шаблоны проектирования в Magento
Шаблоны проектирования в MagentoШаблоны проектирования в Magento
Шаблоны проектирования в MagentoPavel Usachev
 

Similar to C# Web. Занятие 04. (20)

C# Desktop. Занятие 01.
C# Desktop. Занятие 01.C# Desktop. Занятие 01.
C# Desktop. Занятие 01.
 
Java осень 2013 лекция 8
Java осень 2013 лекция 8Java осень 2013 лекция 8
Java осень 2013 лекция 8
 
Ado.net module 6 entity framework
Ado.net module 6 entity frameworkAdo.net module 6 entity framework
Ado.net module 6 entity framework
 
Как пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftКак пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на Swift
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NET
 
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
 
IOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows AzureIOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows Azure
 
C# Desktop. Занятие 12.
C# Desktop. Занятие 12.C# Desktop. Занятие 12.
C# Desktop. Занятие 12.
 
Backbone js
Backbone jsBackbone js
Backbone js
 
Java осень 2012 лекция 8
Java осень 2012 лекция 8Java осень 2012 лекция 8
Java осень 2012 лекция 8
 
Приложения для Windows Phone: как мы это делаем #codefest
Приложения для Windows Phone: как мы это делаем #codefestПриложения для Windows Phone: как мы это делаем #codefest
Приложения для Windows Phone: как мы это делаем #codefest
 
Java осень 2012 лекция 9
Java осень 2012 лекция 9Java осень 2012 лекция 9
Java осень 2012 лекция 9
 
Symfony 3
Symfony 3Symfony 3
Symfony 3
 
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKПрограммируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
 
Mikhail Valkov_Antipatterns
Mikhail Valkov_AntipatternsMikhail Valkov_Antipatterns
Mikhail Valkov_Antipatterns
 
паттерны программирования
паттерны программированияпаттерны программирования
паттерны программирования
 
Шаблоны проектирования в Magento
Шаблоны проектирования в MagentoШаблоны проектирования в Magento
Шаблоны проектирования в Magento
 

More from Igor Shkulipa

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03. Igor Shkulipa
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.Igor Shkulipa
 
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.Igor Shkulipa
 
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.Igor Shkulipa
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.Igor Shkulipa
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.Igor Shkulipa
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.Igor Shkulipa
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.Igor Shkulipa
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.Igor Shkulipa
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.Igor Shkulipa
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.Igor Shkulipa
 
C# Web. Занятие 15.
C# Web. Занятие 15.C# Web. Занятие 15.
C# Web. Занятие 15.Igor Shkulipa
 
C# Web. Занятие 10.
C# Web. Занятие 10.C# Web. Занятие 10.
C# Web. Занятие 10.Igor Shkulipa
 
C# Web. Занятие 05.
C# Web. Занятие 05.C# Web. Занятие 05.
C# Web. Занятие 05.Igor Shkulipa
 
C# Web. Занятие 03.
C# Web. Занятие 03.C# Web. Занятие 03.
C# Web. Занятие 03.Igor Shkulipa
 
C# Web. Занятие 06.
C# Web. Занятие 06.C# Web. Занятие 06.
C# Web. Занятие 06.Igor Shkulipa
 
C# Web. Занятие 02.
C# Web. Занятие 02.C# Web. Занятие 02.
C# Web. Занятие 02.Igor Shkulipa
 
C# Desktop. Занятие 13.
C# Desktop. Занятие 13.C# Desktop. Занятие 13.
C# Desktop. Занятие 13.Igor Shkulipa
 

More from Igor Shkulipa (18)

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03.
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.
 
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.
 
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.
 
C# Web. Занятие 15.
C# Web. Занятие 15.C# Web. Занятие 15.
C# Web. Занятие 15.
 
C# Web. Занятие 10.
C# Web. Занятие 10.C# Web. Занятие 10.
C# Web. Занятие 10.
 
C# Web. Занятие 05.
C# Web. Занятие 05.C# Web. Занятие 05.
C# Web. Занятие 05.
 
C# Web. Занятие 03.
C# Web. Занятие 03.C# Web. Занятие 03.
C# Web. Занятие 03.
 
C# Web. Занятие 06.
C# Web. Занятие 06.C# Web. Занятие 06.
C# Web. Занятие 06.
 
C# Web. Занятие 02.
C# Web. Занятие 02.C# Web. Занятие 02.
C# Web. Занятие 02.
 
C# Desktop. Занятие 13.
C# Desktop. Занятие 13.C# Desktop. Занятие 13.
C# Desktop. Занятие 13.
 

C# Web. Занятие 04.

  • 1. Темы лекции: Entity Framework. Практическое задание: Entity Framework. Тренер: Игорь Шкулипа, к.т.н. Разработка Веб-приложений на платформе Microsoft .NET Framework. Занятие 4
  • 2. http://www.slideshare.net/IgorShkulipa 2 ORM ORM (англ. Object-relational mapping, рус. Объектно-реляционное отображение) — технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования, создавая «виртуальную объектную базу данных». Суть проблемы, которая решается с помощью ORM-слоя, заключается в необходимости преобразования объектных структур в памяти приложения в форму, удобную для сохранения в реляционных базах данных, а также для решения обратной задачи — развертывания реляционной модели в объектную, с сохранением свойств объектов и отношений между ними. Entity Framework представляет специальную объектно- ориентированную технологию на базе .NET для работы с данными. Если традиционные средства ADO.NET позволяют создавать подключения, команды и прочие объекты для взаимодействия с базами данных, то EF представляет собой более высокий уровень абстракции, который позволяет абстрагироваться от самой базы данных и работать с данными независимо от типа хранилища. если на физическом уровне мы оперируем таблицами, индексами, первичными и внешними ключами, но на концептуальном уровне, который нам предлагает EF, мы уже работаем с объектами.
  • 3. http://www.slideshare.net/IgorShkulipa 3 Entity Framework Центральной концепцией Entity Framework является понятие сущности или entity. Сущность представляет набор данных, ассоциированных с определенным объектом. Поэтому данная технология предполагает работу не с таблицами, а с объектами и их наборами. Любая сущность, как и любой объект из реального мира, обладает рядом свойств. Свойства не обязательно представляют простые данные типа int, но и могут представлять более комплексные структуры данных. И у каждой сущности может быть одно или несколько свойств, которые будут отличать эту сущность от других и будут уникально определять эту сущность. Подобные свойства называют ключами. При этом сущности могут быть связаны ассоциативной связью один-ко- многим, один-ко-одному и многие-ко-многим, подобно тому, как в реальной базе данных происходит связь через внешние ключи. Отличительной чертой Entity Framework является использование запросов LINQ для выборки данных из БД. С помощью LINQ мы можем не только извлекать определенные строки, хранящие объекты, из БД, но и получать объекты, связанные различными ассоциативными связями.
  • 4. http://www.slideshare.net/IgorShkulipa 4 Entity Data Model Другим ключевым понятием является Entity Data Model. Эта модель сопоставляет классы сущностей с реальными таблицами в БД. Entity Data Model состоит из трех уровней: концептуального, уровень хранилища и уровень сопоставления (маппинга). • На концептуальном уровне происходит определение классов сущностей, используемых в приложении. • Уровень хранилища определяет таблицы, столбцы, отношения между таблицами и типы данных, с которыми сопоставляется используемая база данных. • Уровень сопоставления (маппинга) служит посредником между предыдущими двумя, определяя сопоставление между свойствами класса сущности и столбцами таблиц. Таким образом, мы можем через классы, определенные в приложении, взаимодействовать с таблицами из базы данных.
  • 5. http://www.slideshare.net/IgorShkulipa 5 Способы взаимодействия с БД Entity Framework предполагает три возможных способа взаимодействия с базой данных: • Database first: Entity Framework создает набор классов, которые отражают модель конкретной базы данных • Model first: сначала разработчик создает модель базы данных, по которой затем Entity Framework создает реальную базу данных на сервере. • Code first: разработчик создает класс модели данных, которые будут храниться в БД, а затем Entity Framework по этой модели генерирует базу данных и ее таблицы
  • 6. http://www.slideshare.net/IgorShkulipa 6 Создание запросов Чтобы эффективно работать с Entity Framework нужно в первую очередь знать, как выполнять запросы к хранилищу данных с использованием EF. Хотя к счастью в Entity Framework создавать запросы очень легко, так как в основном для этого применяются методы LINQ, которые напоминают SQL-выражения. Вначале производится общий запрос к хранилищу данных. Затем свойство объекта представляет объект-коллекцию DbSet и возвращает объект IEnumerable<T>. То есть мы можем получить все объекты из таблицы, например, следующим образом: IEnumerable<SomeTable> someTable = tableContainer.SomeTable; foreach(var st in someTable ) { Console.WriteLine(st.Name); }
  • 17. http://www.slideshare.net/IgorShkulipa 17 Code-First к существующей базе данных Данный подход также представляет способ взаимодействия Code First, однако база данных не генерируется автоматически, а создается самим разработчиком. Иногда программисты называют данный подход Code Second. Данный подход удобен, когда у нас уже есть база данных.
  • 18. http://www.slideshare.net/IgorShkulipa 18 Code-First к существующей базе данных
  • 19. http://www.slideshare.net/IgorShkulipa 19 Database First Database First был первым подходом, который появился в Entity Framework. Данный подход во многом похож на Model First и подходит для тех случаев, когда разработчик уже имеет готовую базу данных. Чтобы Entity Framework мог получить доступ к базе данных, в системе должен быть установлен соответствующий провайдер. Так, Visual Studio уже поддерживает соответствующую инфраструктуру для СУБД MS SQL Server. Для остальных СУБД, например, MySQL, Oracle и других надо устанавливать соответствующие провайдеры.
  • 26. http://www.slideshare.net/IgorShkulipa 26 Строка подключения Иногда может потребоваться динамически изменять местоположение или название базы данных, к которой идет подключения. В этом случае нам надо указать стрку подключения. По умолчанию Visual Studio добавляет в проекты файл конфигурации. В проектах для десктопных приложений этот файл называется App.config, в проектах веб- приложений это файл Web.config. Но вне зависимости от типа проекта файл конфигурации имеет определенную структуру и элементы, среди которых также есть также элемент connectionStrings, определяющий строки подключения.
  • 27. http://www.slideshare.net/IgorShkulipa 27 Навигационные свойства public partial class Person { public Person() { this.Team = new HashSet<Team>(); } public int PID { get; set; } public string Name { get; set; } public string Surname { get; set; } public string Middle { get; set; } public System.DateTime Birthday { get; set; } public string Address { get; set; } public string Phone { get; set; } public string Email { get; set; } //Навигационные свойства задают связи между таблицами public virtual Position Position { get; set; } public virtual ICollection<Team> Team { get; set; } }
  • 28. http://www.slideshare.net/IgorShkulipa 28 Связь один ко многим public partial class Person { public Person() { this.Team = new HashSet<Team>(); } public int PID { get; set; } public string Name { get; set; } public string Surname { get; set; } public string Middle { get; set; } public System.DateTime Birthday { get; set; } public string Address { get; set; } public string Phone { get; set; } public string Email { get; set; } public virtual Position Position { get; set; } public virtual ICollection<Team> Team { get; set; } } public partial class Position { public Position() { this.Person = new HashSet<Person>(); } public int POSID { get; set; } public string PName { get; set; } public virtual ICollection<Person> Person { get; set; } }
  • 29. http://www.slideshare.net/IgorShkulipa 29 Связь многие ко многим public partial class Person { public Person() { this.Team = new HashSet<Team>(); } public int PID { get; set; } public string Name { get; set; } public string Surname { get; set; } public string Middle { get; set; } public System.DateTime Birthday { get; set; } public string Address { get; set; } public string Phone { get; set; } public string Email { get; set; } public virtual Position Position { get; set; } public virtual ICollection<Team> Team { get; set; } } public partial class Team { public Team() { this.Person = new HashSet<Person>(); } public int TID { get; set; } public string TName { get; set; } public virtual ICollection<Person> Person { get; set; } }
  • 30. http://www.slideshare.net/IgorShkulipa 30 Основные операции с данными Большинство операций с данными представляют собой CRUD-операции (Create, Read, Update, Delete), то есть получение данных, создание, обновление и удаление. Entity Framework позволяет легко производить данные операции.
  • 31. http://www.slideshare.net/IgorShkulipa 31 Паттерн «Репозиторий» Одним из наиболее часто используемых паттернов при работе с данными является паттерн Репозиторий. Репозиторий позволяет абстрагироваться от конкретных подключений к источникам данных, с которыми работает программа, и является промежуточным звеном между классами, непосредственно взаимодействующими с данными, и остальной программой.
  • 32. http://www.slideshare.net/IgorShkulipa 32 Пример см. Занятие №3. Интерфейс public interface IRepository<T> { void Insert(T entity); void Delete(T entity); void Update(T entity, T newValue); IQueryable<T> Find(Expression<Func<T, bool>> predicate); IQueryable<T> SelectAll(); void SubmitAll(); }
  • 33. http://www.slideshare.net/IgorShkulipa 33 Реализация public class Repository<T> : IRepository<T> where T : class { protected DbContext DBContext; public Repository(DbContext dataContext) { DBContext = dataContext; } public void Insert(T entity) { DBContext.Set<T>().Add(entity); } public void Delete(T entity) { DBContext.Set<T>().Remove(entity); } public void Update(T entity, T newValue) { var entry = DBContext.Entry<T>(entity); entry.CurrentValues.SetValues(newValue); entry.State = EntityState.Modified; } public IQueryable<T> Find(Expression<Func<T, bool>> predicate) { return DBContext.Set<T>().Where(predicate); } public IQueryable<T> SelectAll() { return DBContext.Set<T>(); } public void SubmitAll() { DBContext.SaveChanges(); } }
  • 34. http://www.slideshare.net/IgorShkulipa 34 Модифицированный контракт [DataContract(Namespace = "WCFS1")] public class Contact { [DataMember] public string Name { get; set; } [DataMember] public string Middle { get; set; } [DataMember] public string Surname { get; set; } [DataMember] public DateTime Birthday { get; set; } [DataMember] public string Address { get; set; } [DataMember] public string Phone { get; set; } [DataMember] public string Email { get; set; } [DataMember] public string Position { get; set; } [DataMember] public List<string> Teams { get; set; } }
  • 35. http://www.slideshare.net/IgorShkulipa 35 Служба public class Service1 : IService1 { IRepository<Person> persons; IRepository<Position> positions; IRepository<Team> teams; Model1Container model; public Service1(){ model = new Model1Container(); persons = new Repository<Person>(model); positions = new Repository<Position>(model); teams = new Repository<Team>(model); } public List<string> GetNames(){ var p = persons.SelectAll(); var res = from pe in p.ToArray<Person>() where true select pe.Name; return res.ToList<string>(); } public Contact GetData(string name){ Contact res = new Contact(); var pers = from p in persons.SelectAll() where p.Name == name select p; res.Name=pers.ToArray<Person>()[0].Name; ... return res; }
  • 36. http://www.slideshare.net/IgorShkulipa 36 Модификация на клиенте. public class ContactViewModel: INotifyPropertyChanged { ... public string DetailsText { get { string result= CurrentContact.Name + "n" + CurrentContact.Middle + "n" + CurrentContact.Surname + "n" + CurrentContact.Birthday.ToString() + "n" + CurrentContact.Address + "n" + CurrentContact.Phone + "n" + CurrentContact.Email + "n"+ CurrentContact.Position+"n"; if (CurrentContact.Teams!=null) foreach (string t in CurrentContact.Teams) { result += t + "n"; } return result; } } }
  • 38. http://www.slideshare.net/IgorShkulipa 38 Лабораторная работа №4. Спроектировать и реализовать базу данных для лабораторной работы №3 с использованием Entity Framework и паттерна «Репозиторий».