Visual Studio 2008 - развитие технологий доступа к данным на платформе Microsoft.NETРоман ЗдебскийЭксперт по технологиям разработки ПОДепартамент стратегических технологий[email protected]://blogs.msdn.com/roman
СодержаниеLINQADO.NET Entity FrameworkADO.NET Data Services Codename ‘Astoria’
Sync FrameworkОбщая картина подхода Microsoft к технологиям доступа к даннымДемонстрации, демонстрации и еще раз демонстрации
Доступ к данным
Краткая ретроспектива
ODBC (1.0 –1992) – низкоуровневый APIOLE DB – COM APIADO – объектная модель - Recordset ADO.NET – объектная модель .NET Dataset
MDAC (Windows DAC) -1996
Microsoft Jet Database EngineDB-LibraryData Access Objects (DAO)Remote Data Objects (RDO)
Доступ к данным
SqlConnection nwindConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind");
SqlCommand catCMD = nwindConn.CreateCommand();catCMD.CommandText = "SELECT CategoryID,
CategoryName FROM Categories WHERE CategoryName LIKE ‘B%’ ORDER BY 1“; nwindConn.Open(); SqlDataReader myReader = catCMD.ExecuteReader(); while (myReader.Read()) { Console.WriteLine("\t{0}\t{1}", myReader.GetInt32(0), myReader.GetString(1));
} myReader.Close(); nwindConn.Close();
DataSet DS=new DataSet();XQueryNavigatorCollection oXQ = new XQueryNavigatorCollection();string strXML = "";string fileName1="c:\\Test\\T1.xml";string alias1 = "MyDataTest.xml";oXQ.AddNavigator( fileName1, alias1 );string strQuery = "<NewDataSet> { " +" let $bb := document(\"MyDataTest.xml\")/*/* " +" let $cc := document(\"MyDatattt.xml\")/*/* " +" for $c in $cc " +" for $b in $bb " +" where $c/kod = $b/kod " +" return <Table> { $b/nazv,$b/dat,$c/naim } </Table> " +" }</NewDataSet> “ ;XQueryExpression xExpression = new XQueryExpression(strQuery);strXML = xExpression.Execute(oXQ).ToXml();StringReader strReader = new StringReader(strXML);XmlTextReader reader = new XmlTextReader(strReader);DS.ReadXml(reader);DataGrid1.DataSource = DS.Tables[0];DataGrid1.DataBind();
Dim xmldoc As New System.Xml.XPath.XPathDocument("c:\books.xml") Dim nav As System.Xml.XPath.XPathNavigator = xmldoc.CreateNavigator()Dim expr As System.Xml.XPath.XPathExpression = nav.Compile( "//Publisher[. = 'MSPress']/parent::node()/Title" )
Типовые уровни при работе с данными
КонцептуальныйБизнес сущности и логикаОбъекты и объектные коллекции
ЛогическийРеляционное представлениеТаблицы, отношенияjunction tables
Физическийфизическое хранение и манипулированиестраницы, экстенты, индексы ограничения (constraints) …
Сложности в работе с даннымиНетипизированные острова
разные для каждого источникаспецифические знания для каждого источникаотсутствие проверок на этапе компиляциисложность в поддержке …… и даже нет IntelliSence
Проблема:Data != Objects
Dataset – реляционное представление в объектном видеСкрытые знания о структуре хранения и объектно–реляционном маппинге (ORM) в виде строкData Access Layer - спасение?
Entity Framework
LINQ
Решение – основные идеиТипизированные запросы Типизированные результаты
Объектное представление схемы храненияОбщее решение для целого ряда продуктовИспользование преимуществ ADO.NET
Создание концептуальной объектной моделиЯвное декларативное представление схемы объектно–реляционного маппинга (ORM) между концептуальной моделью и моделью хранения
LINQ
Подробный вебкаст по основным возможностям LINQ в Visual Studio 2008 -Интегрированные в язык запросы (LINQ) в Microsoft Visual Studio 2008 http://platforma2008.ru/Materials.aspx?EventID=55 Достаточно просто зарегистрироваться на сайте, промокода не нужно.Секция – Средства разработки (DT).
http://www.platforma2008.ru
Language Integrated Query
Единообразные типизированные запросы к любому источнику данных
Методы расширения интерфейса IEnumerable (Select, OrderBy, GroupBy, Join, Where)Возвращаемый результат как объектная коллекция (IEnumerable<T>)
Intellisence, проверка на этапе компиляцииСпециальный синтаксис выражений запросов
C# 3.0
var contacts = from c in customers where c.State == "WA" select new { c.Name, c.Phone };
var contacts = customers .Where(c => c.State == "WA") .Select(c => new { c.Name, c.Phone });
Extension methods
Lambda expressions
Query expressions
Object initializersAnonymous
types
Local variable type inference
VB 9
Dim contacts = From c In customers _ Where c.State = "WA“ _ Select c.Name, c.Phone
Dim contacts = _ customers _ .Where(Function (c) c.State = "WA")_ .Select(Function(c) New With { c.Name, c.Phone })
Extension methods
Lambda expressions
Query expressions
Object initializers
Anonymous types
Local variable type inference
Проект LINQC# 3.0 VB 9.0 Другие
.NET Language Integrated Query
LINQ toDataSet
s
LINQ toEntities
LINQ toObjects
Объекты
LINQ toXML
<book> <title/>
<author/> <year/> <price/>
</book>
XML
Реляционные
источники
LINQ toSQL
LINQ
Краткий обзор
Демонстрация
LINQ текущий статус
Вышел (RTM) в ноябре 2007 года вместе с Visual Studio 2008 и .NET Framework 3.5Поддерживает модель провайдеров, существуют реализации:
LINQ to NHibernateLINQ to AmazonSharePoint, ….
Развивается в направлении параллелизма (manycore) –
PLINQ
Entity Framework
LINQ
Решение – основные идеиТипизированные запросы Типизированные результаты
Объектное представление схемы храненияОбщее решение для целого ряда продуктовИспользование преимуществ ADO.NET
Создание концептуальной объектной моделиЯвное декларативное представление схемы объектно–реляционного маппинга (ORM) между концептуальной моделью и моделью хранения
Entity Framework
Инфраструктура формирования концептуального объектного представления данных с помощью сущностей (Entities)Реализация классических задач ORMАбстрагирование от схемы храненияГибкий маппинг
Архитектура Entity Framework
Гибкий маппингТаблица на иерархию
Гибкий маппингТаблица на тип
Гибкий маппингТаблица на класс
Гибкий маппингРазделение сущности
Гибкий маппингХранимые процедуры
Гибкий маппингХранимые процедуры
Гибкий маппингСоздание представлений (QueryView)
Гибкий маппингСоздание представлений (Defining Query)
ADO.NET Entity Framework
Основные возможности
Демонстрация
Entity Framework – текущий статус
Доступен в Beta 3Релиз (RTM) ожидается во второй половине 2008
Провайдеры третьих производителей для различных баз данных
В течение 3 месяцев после выхода (RTM)
Oracle, IBM DB2, MySQL, PostgreSQL, Informix, Ingres, Sybase, SQLite, SQL Anywhere, Progress …
В течение 2008 годаFirebird
Роль Entity FrameworkЕдиный движок концептуального представления и ORM для ряда ключевых продуктов Microsoft
Сравнивая LINQ и Entity FrameworkLINQЕдинообразные запросы
Единообразные типизированные запросы к любому источникуТипизированные результаты
LINQ to SQL -Типизированное представление логической схемы данных 1:1 ORM LINQ to SQL – возможности переименований объектов данных и поддержка TPH
Entity FrameworkГибкий маппинг
Создание концептуального объектного уровня, абстрагированного от логики хранения
Типизированное представление концептуальной схемы с гибким маппингом – полноценный ORM
Основное назначение
Возможности маппинга
LINQ + Entity FrameworkC# 3.0 VB 9.0 Другие
.NET Language Integrated Query
LINQ toDataSets
LINQ toEntities
LINQ toObjects
Объекты
LINQ toXML
<book> <title/>
<author/> <year/> <price/>
</book>
XML
LINQ toSQL
Реляционные источники
Entity FrameworkКонцептуальна
я схема (CSDL)
Microsoft SQL Server, Oracle, DB2, MySQL…
Маппинг (MSL)
Схема хранения (CSDL)
ADO.NET
ADO.NET Data Services Framework"Project Astoria"
Доступ к данным для интернет приложений
HTML + Javascript
Данные(XML, и т.п.)
DLL + XAML
Данные(XML, и т.п.)
Данные(XML, и т.п.)
Mashup UI
Потоки данны
х
AJAX приложения
Silverlight приложения
Онлайн сервисы
Мэшапы(Mashups)
REST и WS-* сервисы
Очень интересный вебкаст Дэвида Чеппелла с переводом на русский -SOAP/WS-* и REST – удобная организация коммуникаций https://platforma2008.ru/Materials.aspx?EventID=72 Достаточно просто зарегистрироваться на сайте, промокода не нужно.Секция – Сервис-ориентированная архитектура и бизнес-процессы (SA)
http://www.platforma2008.ru
REST-Интерфейс для данных • Основа модели данных
• Сущности и ассоциации ресурсы и ссылки
Entity Data Model
• Каждый ресурс адресуется через URI• Гибкая схема URI для получения
данныхURI
• Данные как ресурсы, HTTP команды - манипулирование
• Использование кэширования, прокси, аутентификации, …
HTTP
• AtomPub, JSONФорматы
• Entity Framework• Источники данных на базе IQueryableИсточники
ADO.NET Data Services
Основные возможности
Демонстрация
ADO.NET Data ServicesC# 3.0 VB 9.0 Другие
.NET Language Integrated Query
LINQ toDataSets
LINQ toEntities
LINQ toObjects
Объекты
LINQ toXML
<book> <title/>
<author/> <year/> <price/>
</book>
XML
LINQ toSQL
Microsoft SQL Server, Oracle, DB2, MySQL…
Entity Framework
ADO.NET
REST API
Client LINQ Rest
Provider
HTTP
Сервер
Клиент
Sync Framework
Ключевые сценарии для синхронизации
Offline• Outlook Cached Mode
• Мобильные сотрудники
• Богатый интерфейс к веб-сервисам
Совместная работа• Мои контакты и
календарь доступны везде
• Документы групп Groove доступны
везде• Моя музыка доступна везде
Microsoft Sync Framework
Типовая структура приложения Sync Framework
Sync Provider
Приложение
Sync Provider
Sync Agent
DataStore
Data Store
изменения
изменения изменения
Microsoft Sync Framework
Возможности синхронизации БД
• Фокус на администратора баз данных, специфично для SQL Server
• Богатый набор возможностей, мало программного контроля
Merge Replicatio
n• Фокус на разработчиков - Sync Runtime
• Синхронизация данных, а не замена записей БД• Компонентная, SOA ориентированная
инфраструктура• Поддержка любого ADO.NET Provider
• Дополнительные возможности с SQL Server 2008• ADO.NET Provider for the Microsoft Sync Framework
Sync Services for
ADO.NET
• Доступно только с SQL Server Compact• Фокус на разработчиков, простота, ограниченные
сценарии (download w/incremental upload)• Sync Services for ADO.NET позволяет работать с
такой же простотой, но с большей масштабируемостью
Remote Data Access
(RDA)
Server
DB
Доступ к данным в ADO.NET• Запрос к серверу• DataAdapter.SelectCommand вызывается, возвращая DataSet• Изменения делаются в RAM над DataSet и возвращаются назад• DataAdapter преобразует изменения в Insert, Update and Delete команды
Forms
DataAdapter
SelectCommand
InsertCommand
UpdateCommand
DeleteCommand
Connection
• Работа через сервисы• Операции приводят к запросу к серверу
• Частичное использование клиента – операции в RAM• Неустойчиво к проблемам в сети
Sync Services for ADO.NET• Построены на DataAdapter• Добавляют Commands инкрементальных обновлений• Добавляют Commands обработки конфликтов• Принимают и возвращают DataSets
FormsSyncAdapter
Select Incremental Deletes
InsertCommand
UpdateCommand
DeleteCommand
Connection
Select Incremental Updates
Select Incremental Inserts
Select Conflict Updated Rows…
Select Conflict Deleted Rows…
SelectCommand
DataAdapter
Server
DB
SQL Server Compact
3.5
Sync Services for ADO.NET• Локальная БД для фоновой синхронизацииoperations• Синхронизация перемещает данные между локальной БД и удаленным
сервисом• Приложение также работает с данными, но локально• Приложение теперь устойчиво к проблемам сети
Forms
Select Incremental Inserts
SyncAdapter
Select Incremental Deletes
InsertCommand
UpdateCommand
DeleteCommand
Connection
Select Incremental Updates
Select Conflict Updated Rows…
Select Conflict Deleted Rows…
Server
DB
Services & Transports
• Небольшая (~1MB) встроенная, in-proc БД• Подмножество ключевых типов SQL
Server и T-SQL• Нет: Stored Procs, Views, Xquery
Что это:
• Mobile & Embedded устройства• Windows Vista, Media Center PC, MSN Client,
ZUNE, Windows Media Player, …• Локальная клиентская БД в VS 2008 по
умолчанию
Где используется
• Локальный online / offline кэш• Локальная, независимая БД приложения
• Сохранение In-Memory данных в БД• Структурированный формат документов
для приложений
Сценарии
Сравнение с SQL Server ExpressSQL Server Compact SQL Server Express
Для чего Ключевой функционал БД в компактном исполнении
Идеален для малых серверов и desktop где нужен более богатый функционал - full text search и мощная поддержка XML в БД
Идеален для мобильных устройств, когда подключение происходит периодически
Легкая миграция на Workgroup, Standard и Enterprise редакции
Внедряется в приложение
Бесплатен Бесплатен
Не для Работы как сервиса Когда нужно минимальное использование памяти
Работы сервера для нескольких пользователей
in-process решений
Когда нужен более полный функционал SQL Server
Работы на мобильных устройствах
Sync Services for ADO.NET
Основные возможности
Демонстрация
Sync Services for ADO.NETC# 3.0 VB 9.0 Другие
.NET Language Integrated Query
LINQ toDataSets
LINQ toEntities
LINQ toObjects
Объекты
LINQ toXML
<book> <title/>
<author/> <year/> <price/>
</book>
XML
LINQ toSQL
Microsoft SQL Server Compact
Microsoft SQL Server
Entity Framework
ADO.NET
Сервер
Клиент
TDS, WCF
Полная картина
Microsoft SQL ServerOracle, DB2, MySQL…
Entity Framework
ADO.NET
REST API LINQ
ASP.NET App
Microsoft SQL Server Compact
HTTP
LINQ
EF
СерверКлиент
TDS, WCF
Data
Services
Sync Services
Microsoft Express EditionsПоказанные примеры используют бесплатные Express версии
Удобны для: прототипирования, изучения, начала разработки
Ссылки по темеLINQ http://msdn2.microsoft.com/en-us/netframework/aa904594.aspx
ADO.NET Entity Frameworkhttp://msdn.microsoft.com/datahttp://blogs.msdn.com/adonet/http://blogs.msdn.com/data/
ADO.NET Data Serviceshttp://astoria.mslivelabs.com/ http://blogs.msdn.com/astoriateam
Sync Services for ADO.NET http://msdn.microsoft.com/sync http://blogs.msdn.com/sync/
Спасибо за внимание!