- •1. Жизненный цикл объекта.
- •2.Делегаты. Назначение, синтаксис объявления, использование делегата. Событийная модель.
- •3. События. Объявление события. Шаблон проектирования события в классе. Свойство для безопасной работы с событиями. Безопасный вызов события в многопоточном программировании.
- •4. Обобщенные классы. Объявление и детализация класса типами пользователя.
- •5. Обобщенные методы. Объявление и детализация методов типами пользователя.
- •6. Ограничения на параметры в обобщенных классах и функциях.
- •7. Типы, допускающие значение null
- •8. Коллекции и итераторы. Оператор yield
- •9.Потоки ввода/вывода в c#. Создание объекта потока и работа с ним. Текстовые, бинарные потоки, потоки со сжатием данных.
- •11. Исключения. Создание класса пользовательского исключения. Генерация и перехват исключения.
- •12. Рефлексия типов. Класс типа Type. Методы и свойства класса.
- •13. Сборки. Статическое и динамическое связывание сборок. Класс сборки Assembly.
- •14. Позднее связывание. Класс System.Activator. Создание экземпляра объекта путем позднего связывания. Вызов методов объекта путем позднего связывания.
- •15. Атрибуты. Назначение атрибутов. Базовый класс атрибута. Аннотирование класса атрибутами.
- •16. Расширяющие методы.
- •17. Анонимные методы. Объявление и использование.
- •18. Захват переменных анонимными методами. Цепочка вызовов.
- •20. Захват переменных в лямбда-выражениях. Рекурсивный вызов в лямбда-выражениях. Анонимная рекурсия.
- •21. Выражения и деревья выражений. Стандартные делегаты, используемые с выражениями и деревьями выражений.
- •22. Комбинирование выражений посредством класса InvocatedExpression.
- •23. Язык интегрированных запросов linq. Назначение, технические средства для реализации языка. Группы языка linq.
- •24. Linq to Objects. Вид запроса. Вызов цепочек расширяющих методов. Языковые конструкции для кодирования запроса. Отложенное и неотложенное выполнение запроса.
- •25. Конструкция from…select… Разделы конструкции. Условия. Проекция. Анонимные типы данных.
- •26. Конструкция from…group… Разделы конструкции. Условия. Ключи группировки. Получение ключа в результате-выборке.
- •28. Linq to Objects. Расширяющие методы для преобразования типов, операций со множествами, преобразования в один элемент.
- •29. Технология linq to sql. Назначение технологии. Класс контекста данных и основные атрибуты для создания контекста данных.
- •30. Создание и подключение класса контекста данных к базе данных. Шаблон программирования при добавлении данных в объект контекста данных.
29. Технология linq to sql. Назначение технологии. Класс контекста данных и основные атрибуты для создания контекста данных.
«LINQ to SQL» это новая технология семейства технологий ADO.NET. Она работает только с Microsoft SQL Server. Основная цель LINQ to SQL является обеспечение согласованности между реляционными БД и программной логикой взаимодействия с ними. LINQ to SQL позволяет встроить доступ к данным в код программы. При программировании с помощью LINQ to SQL скрываются множество типов ADO.NET, таких как SqlConnection, SqlCommand, or SqlDataAdapter. Вместо того чтобы обрабатывать реляционную БД в виде потока записей, можно рассматривать их в виде коллекций объектов определенного класса – класса сущностей. Для работы с технологией LINQ to SQL требуется добавить к проекту ссылку (Reference) на компонент: System.Data.Linq.dll. Задать в программе используемые пространства имен: using System.Data.Linq; using System.Data.Linq.Mapping;
Классы сущностей (entity classes) это классы программы, которые представляют данные содержащиеся в реляционной БД, с которой выполняется работа. С программной точки зрения классы сущностей это описания классов, которые аннотированы с помощью специальных атрибутов технологии «LINQ to SQL» (таких, как [Table] и [Column]), которые связывают их с физическими таблицами в БД. Например, класс сущностей для таблицы Customers:
[Table(Name = "Customers")]
public class Customer {
public string CustomerID;
public string City; }
Атрибут Table. С ним можно задавать следующие параметры: 1) Name – имя таблицы, которой соответствует, описываемый класс сущностей. Например: [Table (Name = xxxxx)]. Атрибут Column. С ним можно задавать следующие параметры: 1) Name – имя соответствующей колонки в таблице; 2) DbType – тип поля записи; 3) CanBeNull – может ли быть значение null у поля записи. 4) IsPrimaryKey – указание, что поле является первичным ключом. Например: [Column (IsPrimaryKey=true)]. После того, как описан класс сущностей запросы к СУБД передаются с помощью класса DataContext. Данный класс отвечает за трансляцию LINQ запросов в соответствующие SQL запросы и передачу их конкретной БД. В некотором смысле DataContext похож на объект Connection, так как он также требует строку соединения. Однако, в отличии от класса Connection, класс DataContext имеет методы, которые связывают результаты выполнения запроса (выборку записей) с описанными классами сущностей.
Класс DataContext описывает способ получения экземпляров класса сущностей, которые могут использоваться в программе. После получения экземпляров сущностей можно менять их состояние любым желательным способом (добавлять, изменять и т.п.) и предоставлять измененный объект назад для последующей обработки. В этом смысле класс DataContext похож на класс DataAdapter.
Конструктор: DataContext ctx = new DataContext(<строка соединения>). Методы: 1) проверки соединения с базой данных DatabaseExists() – если true, то соединение выполнено успешно. 2) получение таблицу Table<имя таблицы> GetTable<имя таблицы>(). Например: Table<Inventory> invTable = ctx.GetTable<Inventory>(); 3) Метод сохранения изменений SubmitChanges(): ctx.SubmitChanges(); Класс Table<> Описывает таблицу указанного типа в базе данных. Типизированный класс, для которого задается используемый им тип данных. Table <Customers> tbc; Хранит объекты классов сущностей, того класса, который указан в угловых скобках. Предоставляет методы для работы LINQ запросов. Свойство IsReadOnly возвращает true если таблица описана только для чтения из БД. Для получения ссылки на объект класса Table<> используется метод GetTable<> класса DataContext: DataContext cnt = new DtaContext(strconn); Table<MyTable> tbl = cnt.GetTable<MyTable>; Добавления новой записи в таблицу InsertOnSubmit(): tbl.InsertOnSubmit(object); Удаление записи из таблицы DeleteOnSubmit(): tbl.DeleteOnSubmit(object);