![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Подходы к построению EDM ⇐ ПредыдущаяСтр 9 из 9
1) Database First – Entity Data Model и код описывающих её класса генерируется на основе существующей БД. Это классический подход к разработке ИС. 2) Model First 3) Code First - разработчик описывает код класса на основе которого генерируется как концептуальная модель так и структура БД. 4) Code First with Autogenarration - Под классом EMD генерируется на основе существующей БД. Графическая модель при этом не создаётся. Дальнейшая тразработка EDM осуществляется путем редактирования исходного кода класса. 02.12.2015 Язык LINQ LINQ – представляет собой набор синтаксических конструкции и поддерживающих их библиотек, позволяющим в программ на языках платформы.NET, строить запросы к различным источников данных. Выражения LINQ внешне напоминают SQL запросы, однако прямой аналогий у нее нет. В зависимости использовании нескольких источников данных различают несколько расшифруют. · LINQ to Object · LINQ to SQL · LINQ to DataSet · LINQ to Entities · LINQ to XML
Выражения LINQ Определяется при помощи ряда ключевых слов. В частности оно должно включать конструкцию from From < псевдоним> in < источник> Определяющий результат запроса. Кроме этого в запросе могут присутствовать конструкции определяющиеся различные действия над данными такие как where, order by, group, join и т.д. Источником данных в LINQ запросов является объект интерпретатор IENUMERABLE и результатом запроса также является объект IENUMERABLE. Таким образом результаты одного запроса могут быть источником данных для другого, что используется при построения под запроса, а также цепочек способа их обнаружения. В языке LINQ реализовано отложенное руководство. То есть результат запроса определяется не при построении запроса а при обращении к нему например при итерации которые получаем в результате запроса. При выполнении LINQ запроса в зависимости от источника данных он транслируется или вызов SQL запроса БД, или в цикл. Практически любой запрос может быть заменен циклом foreach. Это может дать небольшой выйграш в производительности в большинстве случаев незначительный. Проекция Хотя как источник так и результат запроса являются итераторами реализующими интерфейс IENUMERABLE их элементы могут принадлежать к разным классам и иметь разную структуру. Способность трансформировать данные из одного класса в другой называется проекцией. При выполнении проекции данные могут выполнены быть как существующему класса так и к явно созданному классу. Имеется класс Product определяющий информацию о товаре и определен итерациией данных о товаре. IEnumerable < Product> Products IEnumerable < string> names, names = from p in Products select p.Names Пример проекции на анонимный класс var prod, prod = from p in Products select new { ProdName = p.Name, ProdPrice = p.Price } В этом случае класс которому будут принадлежать результаты запросы не задается явно, а определяется с помощью ключевого слова var. В запросе присутствует знакомое слово new – это означает что для результата запроса будет автоматически создан новый класс, содержащий 2 поля: · ProdName · ProdPrice Возможность проекции на анонимный классы не нарушает типизации. То есть объекты анонимных базовых классов могут присутствовать в разных типах. 03.12.2015 Методы расширения Расширяющиеся методы позволяют определить в одном классе, а использовать его в другом экземпляре класса. Почти весь функционал языка LINQ реализован при помощью методов расширения. Методы LINQопределенны в классе System.Linq.Enumerable и могут быть вызваны с любим объектом IEnumerable. Для этого необходимо экспортировать пространство имен using System.Linq. Благодаря этому существенно расширяется функционал существующих коллекции и других составляющих. Кроме того в различных расширений Linq определенны разные составляющих одних и тех же методов. В Linq определенно приблизительно около 10 методов. В том числе Select, Where, OrderBy, OrderByDescending, ThenBy, ThenByDesending, Count, Sum, Min, Max, Avg, FirstOrDefault, Any, All, ….. Любой LINQ запрос может быть определен в явном и не явном синтаксисе. Не явный синтаксис или синтаксис выражения запроса. Предполагает использования ключевых слов, для определения запроса в SQLподобном стиле. Явный синтаксис или синтаксис вызова метода предполагает построения запроса виде последовательности вызовов методов расширения. Пример Var query1 = From prod in Products Where prod.Price > 100 Orderby prod.Name, prod.Year desrending Select new { Name = prod.Name, Year = prod.Year } Var query2 = Products. Where(prod => prod.Price> 100) OrderBy(prod => prod.Name) ThenByDescending(prod => prod.Year) Select(prod = > new { Name = prod.Name, Year = prod.Year }) Использования лямбда-выражения Лямбда – выражения представляет собой синтаксис описания методов подобного синтаксису математических формул. Лямбда выражения обозначается таким значком =>. Левая часть идентифицирует входные параметры, правая выполняемые над ними действия. Лямбда-выражения широко применяется в языке LINQ так как очень многие параметры применяют в качестве параметра делегаты, описывающиеся действия над элементами входной конъюнкции. В качестве делегата может быть передан любой метод имеющий требуемую сигнатуру. Это может быть именованный метод класс или анонимный метод. Анонимный метод может быть описан в обычном методе C# или более компактном синтаксисе лямбда-выражения. Анонимный синтаксис Var query3 = Products Select ( Delegate (Product prod) { Return new { Name = prod.Name, Year = prod.Year } }) Синтаксисе лямбда выражения Var query4 = Products Select (prod => new { Name = prod.Name, Year = prod.Year }) Использования анонимных методов и лямбда-выражении семантически эквивалентно, но лямбда-выражения позволяют получить более компактный тест запроса. Особенности много-табличных запросов В отличие от языка SQL в них операция JOIN применяется очень редко. Вместо этого для выборки данных выбранной сущности применяются определенные свойства. Извлечения данных при помощи Join: Var query5 = From ord in Orders From prod in Products Join or in ord.Products = prod Select new { Name = prod.Name, Year = prod.Year } Извлечения данных при помощи навигационных свойств: Var query6 = From ord in Orders Select new { Name = ord.Product.Name Date = ord.Date }
|