Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
My_shpory_Ivan_Ivanich (2).docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
149.35 Кб
Скачать

26. Технология объектно-реляционного связывания, персистентные объекты, на примере одной из технологии (Linq to sql, Linq to Entities, nHibernate)

LINQ to SQL поддерживает запросы к модели объектов, сопоставленной со структурами данных реляционной базы данных, без использования промежуточной концептуальной модели. Каждая таблица представляется отдельным классом; таким образом, модель объектов тесно привязывается к схеме реляционной базы данных.

LINQ to SQL является компонентом .NET Framework версии 3.5, предоставляющим инфраструктуру времени выполнения для управления реляционными данными как объектами. 

В LINQ to SQL модель данных реляционной базы данных сопоставляется объектной модели, выраженной в языке программирования разработчика. При запуске приложения LINQ to SQL преобразует запросы LINQ из объектной модели в SQL и отправляет их в базу данных для выполнения. Когда база данных возвращает результаты, LINQ to SQL преобразует их обратно в объекты, с которыми можно работать на собственном языке программирования.

С помощью LINQ to SQL можно использовать технологию LINQ для доступа к базам данных SQL как к коллекции в памяти.

LINQ to SQL поддерживает все основные возможности, необходимые для разработчиков на SQL. Можно запрашивать данные, вставлять, обновлять и удалять сведения из таблиц.

Пример

public partial class Northwind : DataContext

{

public Table<Customer> Customers;

public Table<Order> Orders;

public Northwind(string connection) : base(connection) { }

}

Northwnd db = new Northwnd(@"c:\Northwnd.mdf");

var query =

from cust in db.Customers

where cust.City == "London"

select cust;

foreach (var cust in query)

Console.WriteLine("id = {0}, City = {1}", cust.CustomerID, cust.City);

DataContext – класс

Представляет главную точку входа для структуры LINQ to SQL.

DataContext является источником всех сущностей, сопоставленных через подключение к базе данных. Отслеживает изменения, выполненные для всех извлеченных сущностей, и поддерживает "кэш удостоверения", гарантирующий, что сущности, извлеченные более одного раза, представлены с помощью того же экземпляра объекта.

Entity Framework

Entity Framework (EF) — это объектно-реляционный модуль сопоставления, позволяющий разработчикам .NET работать с реляционными данными с помощью объектов, специализированных для доменов. Это устраняет необходимость в написания большей части кода для доступа к данным, который обычно требуется разработчикам.

Используйте Code First для определения модели в коде и последующего создания базы данных.

Используйте Model First для определения модели, используя поля и линии, и последующего создания базы данных.

Используйте Database First для создания модели из полей и линий, сопоставляемой с существующей базой данных.

27. Linq to Objects: архитектура технологии и возможности, понятие итератора, создание Linq запросов

Термином "LINQ to Objects" называют использование запросов LINQ непосредственно с коллекциями IEnumerable или IEnumerable<T> без промежуточных поставщиков LINQ или API-интерфейсов, таких как LINQ to SQL [LINQ to SQL] или LINQ to XML. LINQ можно использовать для запроса любых перечислимых коллекций, таких как List<T>Array или Dictionary<TKey, TValue>. Коллекция может быть определенной пользователем или возвращенной API .NET Framework.

По сути, LINQ to Objects представляет новый подход к коллекциям. Раньше нужно было писать сложные циклы foreach, которые определяли способ извлечения данных из коллекции. При применении подхода LINQ создается декларативный код с описанием необходимых извлекаемых данных.

Кроме того, запросы LINQ имеют три основных преимущества перед традиционными циклами foreach.

  1. Они более компактные и удобочитаемые, особенно при фильтрации по нескольким условиям.

  2. Они предоставляют мощные возможности фильтрации, упорядочивания и группировки с минимальным объемом кода приложения.

  3. Они могут быть перенесены на другие источники данных с минимальными изменениями или без изменений.

В общем случае, чем более сложные операции следует выполнить над данными, тем больше преимуществ от применения LINQ вместо использования традиционных методов итераций.

OfType<T> – преобразует любое перечисление в строго типизированный вариант, используя слабое преобразование типов, т.е. пропуская элементы, не являющиеся типом T.

object[] values = new object[] {"1", "2", "3", "AAA", 5}; IEnumerable<string> strings = values.OfType<string>(); // последний элемент будет пропущен, поскольку он не string

Where<T> — фильтрация по указанному критерию.

object[] values = new object[] { "1", "2", "3", "AAA", 5, "ABB" }; IEnumerable<string> strings = values.OfType<string>().Where(i => i.StartsWith(“A”)); // извлекаем все строки, которые начинаются на A

First<T> и Last<T> — извлечь первый и последний элемент перечисления. Заваливаются с исключением, если перечесление не содержит элементов. 

Удалить дубликаты из перечисления можно методом Distinct<T>:

var values = new[] { "1", "1", "2", "2", "3", "3", "3" }; IEnumerable<string> strings = values.Distinct(); // "1", "2", "3"

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]