Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Подходы к построению EDM






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

}

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.