На основе доклада Романа Здебского на семинаре «Дни разработчика»

Презентация:



Advertisements
Похожие презентации
Роман Здебский Microsoft
Advertisements

Объекты в приложении Данные в таблицах Entity Data Model Концептуальная схема Схема хранения данных ОтображениеОтображение.
PDC Конференция в LA в сентябре 2005 Все материалы доступны свободно downloads.aspx
Microsoft TechDays Сергей Звездин
Объектные интерфейсы (.NET) «Школа Инноваций InterSystems 2007»
NHibernate что, где, когда Артур Дробинский ЗетаСофт Томск, 2012.
Объект Command Свойства объекта Command Connection CommandText.
Work with databases in Java. JDBC Tutorial for students of universities Author: Dudnik Oxana.
Microsoft TechDays Марат Бакиров Эксперт по разработке ПО Microsoft
Дмитрий Петухов ЦКЗ Аргус. Технологии доступа к данным Популярные ORM ы NHibernate Демо.
Info My name – Valera Kolupaev – Wave for questions -
Microsoft TechDays Евгений Марченков Эксперт по технологиям разработки ПО.
WinCC Работа и мониторинг Siemens AG All rights reserved.© TC Nbg.-M Date: File: E02OFFe.PPT Catalog: NWINCC Открытость и способность.
POWERPIVOT И ТАБЛИЧНАЯ МОДЕЛЬ Tabular BISM Иван Косяков Москва Microsoft к.э.н., архитектор аналитических систем
Name: Yogesh Mehla Website: Phone:
Microsoft TechDays Косяков Иван Консультант КРОК.
Типы хранимых процедур System stored procedures User-defined stored procedures Temporary stored procedures.
Hibernate&EJB3 Studybook For students of university Author Sr.Java developer Dudnik Oxana.
© 2009 Avaya Inc. All rights reserved.1 Chapter Three, Voic Pro Advanced Functions Module Two – Database and IVR.
Разработка веб- приложений с помощью ASP.NET Dynamic Data и ASP.NET Dynamic Data MVC Александр Краковецкий The Frayman Group Microsoft Regional Director.
Транксрипт:

На основе доклада Романа Здебского на семинаре «Дни разработчика»

Существующие проблемы LINQ ADO.NET Entity Framework

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(); 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 = " { " + " let $bb := document(\"MyDataTest.xml\")/*/* " + " let $cc := document(\"MyDatattt.xml\")/*/* " + " for $c in $cc " + " for $b in $bb " + " where $c/kod = $b/kod " + " return { $b/nazv,$b/dat,$c/naim } " + " } ; 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(); 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 = " { " + " let $bb := document(\"MyDataTest.xml\")/*/* " + " let $cc := document(\"MyDatattt.xml\")/*/* " + " for $c in $cc " + " for $b in $bb " + " where $c/kod = $b/kod " + " return { $b/nazv,$b/dat,$c/naim } " + " } ; 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" ) 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 - спасение?

Типизированные запросы Типизированные результаты Объектное представление схемы хранения Общее решение для целого ряда продуктов Использование преимуществ ADO.NET Создание концептуальной объектной модели Явное декларативное представление схемы объектно–реляционного маппинга (ORM) между концептуальной моделью и моделью хранения

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 initializers Anonymous types Local variable type inference

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

C# 3.0C# 3.0 VB 9.0VB 9.0 ДругиеДругие.NET Language Integrated Query Реляционные источники

Краткий обзор

Вышел (RTM) в ноябре 2007 года вместе с Visual Studio 2008 и.NET Framework 3.5 Поддерживает модель провайдеров, существуют реализации: LINQ to NHibernate LINQ to Amazon SharePoint, …. Развивается в направлении параллелизма – PLINQ

Типизированные запросы Типизированные результаты Объектное представление схемы хранения Общее решение для целого ряда продуктов Использование преимуществ ADO.NET Создание концептуальной объектной модели Явное декларативное представление схемы объектно–реляционного маппинга (ORM) между концептуальной моделью и моделью хранения

Таблица на иерархию

Таблица на тип

Таблица на класс

Разделение сущности

Хранимые процедуры

Создание представлений (QueryView)

Создание представлений (Defining Query)

Основные возможности

Доступен в составе.NET Framework SP1 Beta Уже создан провайдер для Oracle Провайдеры третьих производителей для различных баз данных В течение 3 месяцев после выхода (RTM) IBM DB2, MySQL, PostgreSQL, Informix, Ingres, Sybase, SQLite, SQL Anywhere, Progress … В течение года Firebird

Единый движок концептуального представления и ORM для ряда ключевых продуктов Microsoft

Возможности маппинга

C# 3.0C# 3.0 VB 9.0VB 9.0 ДругиеДругие.NET Language Integrated Query Реляционные источники Microsoft SQL Server, Oracle, DB2, MySQL…

LINQ ADO.NET Entity Framework