530 likes | 749 Views
Visual Studio 2008 - развитие технологий доступа к данным на платформе Microsoft.NET. Роман Здебский Эксперт по технологиям разработки ПО Департамент стратегических технологий Microsoft rzdebski@microsoft.com http://blogs.msdn.com/roman. LINQ ADO.NET Entity Framework
E N D
VisualStudio 2008 - развитие технологий доступа к данным на платформе Microsoft.NET Роман Здебский Эксперт по технологиям разработки ПО Департамент стратегических технологий Microsoft rzdebski@microsoft.com http://blogs.msdn.com/roman
LINQ ADO.NET Entity Framework ADO.NET Data Services Codename ‘Astoria’ Sync Framework Общая картина подхода Microsoft к технологиям доступа к данным Демонстрации, демонстрации и еще раз демонстрации Содержание Доступ к данным
Краткая ретроспектива • ODBC (1.0 –1992) – низкоуровневый API • OLE DB – COM API • ADO – объектная модель - Recordset • ADO.NET – объектная модель .NET Dataset • MDAC (Windows DAC) -1996 • Microsoft Jet Database Engine • DB-Library • Data Access Objects(DAO) • Remote Data Objects (RDO)
Доступ к данным DataSet DS=new DataSet(); XQueryNavigatorCollectionoXQ = 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> “ ; XQueryExpressionxExpression = new XQueryExpression(strQuery); strXML = xExpression.Execute(oXQ).ToXml(); StringReaderstrReader = new StringReader(strXML); XmlTextReader reader = new XmlTextReader(strReader); DS.ReadXml(reader); DataGrid1.DataSource = DS.Tables[0]; DataGrid1.DataBind(); SqlConnectionnwindConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind"); SqlCommandcatCMD = nwindConn.CreateCommand(); catCMD.CommandText= "SELECT CategoryID, CategoryName FROM Categories WHERE CategoryName LIKE ‘B%’ ORDER BY 1“; nwindConn.Open(); SqlDataReadermyReader = catCMD.ExecuteReader(); while (myReader.Read()) { Console.WriteLine("\t{0}\t{1}", myReader.GetInt32(0), myReader.GetString(1)); } myReader.Close(); nwindConn.Close(); 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) …
Сложности в работе с данными Проблема: Data != Objects • Нетипизированные острова • разные для каждого источника • специфические знания для каждого источника • отсутствие проверок на этапе компиляции • сложность в поддержке … • … и даже нет IntelliSence Dataset – реляционное представление в объектном виде Скрытыезнания о структуре хранения и объектно–реляционном маппинге (ORM) в виде строк Data Access Layer - спасение?
Решение – основные идеи LINQ • Типизированные запросы • Типизированные результаты • Объектное представление схемы хранения • Общее решение для целого ряда продуктов • Использование преимуществ ADO.NET • Создание концептуальной объектной модели • Явное декларативное представление схемы объектно–реляционного маппинга(ORM) между концептуальной моделью и моделью хранения Entity Framework
LINQ • Подробный вебкаст по основным возможностям LINQ в Visual Studio 2008 - Интегрированные в язык запросы (LINQ) в Microsoft VisualStudio 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 Query expressions var contacts = from c in customers where c.State == "WA" select new { c.Name, c.Phone }; Local variable type inference Lambda expressions var contacts = customers .Where(c => c.State == "WA") .Select(c => new { c.Name, c.Phone }); Extension methods Object initializers Anonymous types
VB 9 Query expressions Dim contacts = From c In customers _ Where c.State = "WA“ _ Select c.Name, c.Phone Local variable type inference Lambda expressions Dim contacts = _ customers _ .Where(Function (c) c.State = "WA")_ .Select(Function(c) New With { c.Name, c.Phone }) Extension methods Object initializers Anonymous types
<book> <title/> <author/> <year/> <price/> </book> XML Объекты Реляционные источники Проект LINQ .NET Language Integrated Query C# 3.0 VB 9.0 Другие LINQ toDataSets LINQ toEntities LINQ toObjects LINQ toXML LINQ toSQL
LINQ Демонстрация Краткий обзор
LINQ текущий статус • Вышел (RTM) в ноябре 2007 года вместе с Visual Studio 2008 и .NET Framework 3.5 • Поддерживает модель провайдеров, существуют реализации: • LINQ to NHibernate • LINQ to Amazon • SharePoint, …. • Развивается в направлении параллелизма (manycore) – • PLINQ
Решение – основные идеи LINQ • Типизированные запросы • Типизированные результаты • Объектное представление схемы хранения • Общее решение для целого ряда продуктов • Использование преимуществ ADO.NET • Создание концептуальной объектной модели • Явное декларативное представление схемы объектно–реляционного маппинга(ORM) между концептуальной моделью и моделью хранения Entity Framework
Entity Framework • Инфраструктура формирования концептуального объектного представления данных с помощью сущностей (Entities) • Реализация классических задач ORM • Абстрагирование от схемы хранения • Гибкий маппинг
Гибкий маппинг • Таблица на иерархию
Гибкий маппинг • Таблица на тип
Гибкий маппинг • Таблица на класс
Гибкий маппинг • Разделение сущности
Гибкий маппинг • Хранимые процедуры
Гибкий маппинг • Хранимые процедуры
Гибкий маппинг • Создание представлений (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 Framework Основноеназначение LINQ Единообразныезапросы Entity Framework Гибкий маппинг Создание концептуального объектного уровня, абстрагированного от логики хранения Типизированное представлениеконцептуальной схемы с гибким маппингом – полноценный ORM • Единообразные типизированные запросы к любому источнику • Типизированные результаты • LINQ to SQL -Типизированное представление логической схемы данных 1:1ORM • LINQ to SQL – возможности переименований объектов данных и поддержка TPH Возможности маппинга
<book> <title/> <author/> <year/> <price/> </book> Microsoft SQL Server, Oracle, DB2, MySQL… XML Объекты LINQ + Entity Framework Реляционные источники .NET Language Integrated Query EntityFramework Концептуальная схема (CSDL) Маппинг (MSL) Схема хранения (CSDL) C# 3.0 VB 9.0 Другие ADO.NET LINQ toEntities LINQ toDataSets LINQ toSQL LINQ toObjects LINQ toXML
Доступ к данным для интернет приложений HTML + Javascript DLL + XAML Mashup UI Данные(XML, и т.п.) Данные(XML, и т.п.) Данные(XML, и т.п.) Потоки данных AJAX приложения Silverlightприложения Онлайн сервисы Мэшапы (Mashups)
REST и WS-* сервисы • Очень интересный вебкаст Дэвида Чеппелла с переводом на русский - • SOAP/WS-* и REST – удобная организация коммуникаций • https://platforma2008.ru/Materials.aspx?EventID=72Достаточно просто зарегистрироваться на сайте, промокода не нужно. • Секция – Сервис-ориентированная архитектура и бизнес-процессы (SA) • http://www.platforma2008.ru
ADO.NET Data Services Демонстрация Основные возможности
<book> <title/> <author/> <year/> <price/> </book> Microsoft SQL Server, Oracle, DB2, MySQL… XML Объекты ADO.NET Data Services Клиент .NET Language Integrated Query Client LINQ Rest Provider HTTP Сервер REST API Другие VB 9.0 C# 3.0 EntityFramework ADO.NET LINQ toDataSets LINQ toEntities LINQ toSQL LINQ toObjects LINQ toXML
Ключевые сценарии для синхронизации Microsoft Sync Framework
Типовая структура приложения Sync Framework Приложение Microsoft Sync Framework Sync Agent изменения Sync Provider Sync Provider DataStore Data Store изменения изменения
Доступ к данным в ADO.NET • Запрос к серверу • DataAdapter.SelectCommandвызывается, возвращая DataSet • Изменения делаются в RAM надDataSetи возвращаются назад • DataAdapterпреобразует изменения в Insert, Update and Delete команды DataAdapter SelectCommand Server DB InsertCommand Connection Forms UpdateCommand DeleteCommand • Работа через сервисы • Операции приводят к запросу к серверу • Частичное использование клиента – операции в RAM • Неустойчиво к проблемам в сети
Sync Services for ADO.NET • Построены наDataAdapter • Добавляют Commandsинкрементальных обновлений • Добавляют Commandsобработки конфликтов • Принимают и возвращают DataSets Select Incremental Inserts Select Incremental Updates DataAdapter SyncAdapter Select Incremental Deletes SelectCommand Server DB InsertCommand Connection Forms UpdateCommand DeleteCommand Select Conflict Updated Rows… Select Conflict Deleted Rows…
Sync Services for ADO.NET • Локальная БД для фоновой синхронизацииoperations • Синхронизация перемещает данные между локальной БД и удаленным сервисом • Приложение также работает с данными, но локально • Приложение теперь устойчиво к проблемам сети Select Incremental Inserts Select Incremental Updates Services & Transports SyncAdapter Select Incremental Deletes Server DB InsertCommand Connection Forms UpdateCommand DeleteCommand Select Conflict Updated Rows… Select Conflict Deleted Rows… SQL Server Compact 3.5
Sync Services for ADO.NET Демонстрация Основные возможности
<book> <title/> <author/> <year/> <price/> </book> XML Объекты Sync Services for ADO.NET Клиент .NET Language Integrated Query EntityFramework ADO.NET Microsoft SQL Server Compact Другие C# 3.0 VB 9.0 TDS, WCF Сервер Microsoft SQL Server LINQ toEntities LINQ toDataSets LINQ toSQL LINQ toObjects LINQ toXML
Microsoft SQL Server Oracle, DB2, MySQL… Полная картина Клиент Сервер LINQ Data Services EF HTTP ASP.NET App REST API LINQ EntityFramework ADO.NET Sync Services TDS, WCF Microsoft SQL ServerCompact
Microsoft Express Editions • Показанные примеры используют бесплатныеExpress версии • Удобны для:прототипирования, изучения, начала разработки