
- •Оглавление
- •Об авторе
- •Посвящение
- •Благодарности
- •Ждем ваших отзывов!
- •Что такое .NET
- •Создание исходной программы
- •Тестовая поездка
- •Каркас программы
- •Комментарии
- •Введение в хитрости панели элементов
- •Повторное использование кода из панели элементов
- •Правила объявления переменных
- •Вариации на тему int
- •Объявление переменной с плавающей точкой
- •Ограничения переменных с плавающей точкой
- •Объявление переменных типа decimal
- •Сравнение десятичных и целых чисел, а также чисел с плавающей точкой
- •Логичен ли логический тип
- •Символьные типы
- •Что такое тип-значение
- •Неизменяемость строк
- •Основные операции над строками
- •Сравнение строк
- •Сравнение без учета регистра
- •Отличие строк в разных регистрах
- •Преобразование символов строки в символы верхнего или нижнего регистра
- •Поиск в строках
- •Как искать
- •Пуста ли строка
- •Удаление пробельных символов
- •Анализ числового ввода
- •Обработка последовательности чисел
- •Объединение массива строк в одну строку
- •Арифметика
- •Простейшие операторы
- •Порядок выполнения операторов
- •Оператор инкремента
- •Сравнение чисел с плавающей точкой
- •Составные логические операторы
- •Вычисление типа операции
- •Типы при присваивании
- •Перегрузка операторов
- •Ветвление с использованием if и switch
- •Инструкция if
- •Инструкция else
- •Как избежать else
- •Вложенные инструкции if
- •Конструкция switch
- •Циклы
- •Цикл без счетчика
- •Правила области видимости
- •Пример
- •Зачем нужны разные циклы
- •Зачем нужны массивы
- •Массив фиксированного размера
- •Массив переменного размера
- •Свойство Length
- •Инициализация массивов
- •Понятие <т>
- •Обобщенные коллекции
- •Инстанцирование пустого списка
- •Создание списка целых чисел
- •Преобразования списков в массивы и обратно
- •Подсчет количества элементов в списке
- •Поиск в списках
- •Инициализаторы массивов и коллекций
- •Выполнение специфичных для множеств задач
- •Создание множества
- •Добавление элемента в множество
- •Выполнение объединения
- •Пересечение множеств
- •Получение разности
- •Не используйте старые коллекции
- •Обход каталога файлов
- •Начало программы
- •Получение начальных входных данных
- •Создание списка файлов
- •Форматирование вывода
- •Вывод в шестнадцатеричном формате
- •Обход коллекций: итераторы
- •Доступ к коллекции: общая задача
- •Использование foreach
- •Формат индексатора
- •Блок итератора
- •Создание каркаса блока итератора
- •Итерирование дней в месяцах
- •Что же такое коллекция
- •Синтаксис итератора
- •Блоки итераторов произвольного вида и размера
- •Обобщенные классы безопасны
- •Обобщенные классы эффективны
- •Очередь с приоритетами
- •Распаковка пакета
- •Написание обобщенного кода
- •Использование простого необобщенного класса фабрики
- •Незавершенные дела
- •Ковариантность
- •Использование механизма исключений для сообщения об ошибках
- •Что происходит при генерации исключения
- •Исключительный пример
- •Что делает этот пример "исключительным"
- •Трассировка стека
- •Советы по написанию кода с хорошей обработкой ошибок
- •Анализ возможных исключений метода
- •Как выяснить, какие исключения генерируются теми или иными методами
- •Генерирующие исключения выражения
- •Работа с перечислениями
- •Создание перечислений с инициализаторами
- •Указание типа данных перечисления
- •Применение перечислений в конструкции switch
- •Процедурные поездки
- •Объектно-ориентированные поездки
- •Определение класса и объекта
- •Определение класса
- •Что такое объект
- •Различие между объектами
- •Работа со ссылками
- •Классы, содержащие классы
- •Определение константных членов-данных и членов-данных только для чтения
- •Передача аргументов методу
- •Передача методу нескольких аргументов
- •Соответствие определений аргументов их использованию
- •Перегрузка методов
- •Реализация аргументов по умолчанию
- •Возврат значения оператором return
- •Кортеж с двумя элементами
- •Создание кортежей более чем с двумя элементами
- •Глава 14 Поговорим об этом
- •Определение методов
- •Определение статического метода
- •Определение метода экземпляра
- •Полное имя метода
- •Ключевое слово this
- •Когда this используется явно
- •Что делать при отсутствии this
- •Использование локальных функций
- •Прочие уровни безопасности
- •Методы доступа
- •Пример управления доступом
- •Выводы
- •Статические свойства
- •Побочные действия свойств
- •Дайте компилятору написать свойства для вас
- •Методы и уровни доступа
- •Замена конструктора по умолчанию
- •Конструирование объектов
- •Непосредственная инициализация объекта
- •Конструирование с инициализаторами
- •Инициализация объекта без конструктора
- •Определение свойств с кодом
- •Определение конструкторов и деструкторов с кодом
- •Определение методов доступа к свойствам с кодом
- •Определение методов доступа к событиям с кодом
- •Наследование класса
- •Более сложный пример наследования
- •ЯВЛЯЕТСЯ или СОДЕРЖИТ
- •Доступ к BankAccount через содержание
- •Отношение СОДЕРЖИТ
- •Заменяемость классов
- •Неверное преобразование времени выполнения
- •Указание конкретного конструктора базового класса
- •Обновленный класс BankAccount
- •Перегрузка унаследованного метода
- •Простейший случай перегрузки метода
- •Различные классы, различные методы
- •Сокрытие метода базового класса
- •Вызов методов базового класса
- •Что неверно в стратегии использования объявленного типа
- •Использование is для полиморфного доступа к скрытому методу
- •Объявление метода виртуальным и перекрытие
- •Получение максимальной выгоды от полиморфизма
- •Разложение классов
- •Абстрактный класс: ничего, кроме идеи
- •Как использовать абстрактные классы
- •Создание абстрактных объектов невозможно
- •Опечатывание класса
- •Реализация интерфейса
- •Именование интерфейсов
- •Наследование и реализация интерфейса
- •Преимущества интерфейсов
- •Тип, возвращаемый методом
- •Что скрыто за интерфейсом
- •Гибкие зависимости через интерфейсы
- •Реализация отношения СОДЕРЖИТ с помощью интерфейсов
- •Определение делегата
- •Пример передачи кода
- •Делегирование задания
- •Очень простой первый пример
- •Более реальный пример
- •Создание приложения
- •Жизненный цикл делегата
- •Анонимные методы
- •Проектный шаблон Observer
- •Что такое событие. Публикация и подписка
- •Как издатель оповещает о своих событиях
- •Как подписаться на событие
- •Как опубликовать событие
- •Как наблюдатели "обрабатывают" событие
- •Сборки
- •Выполнимые файлы
- •Библиотеки классов
- •Создание проекта библиотеки классов
- •Создание автономной библиотеки классов
- •Создание классов для библиотеки
- •Использование тестового приложения
- •Дополнительные ключевые слова для управления доступом
- •protected: поделимся с подклассами
- •protected internal: более изощренная защита
- •Размещение классов в пространствах имен
- •Объявление пространств имен
- •Пространства имен и доступ
- •Использование полностью квалифицированных имен
- •Ссылочные типы
- •Выходные параметры
- •Альтернативные методы возврата значений
- •Работа с переменными out
- •Возврат значений по ссылке
- •Различия типов-значений
- •Когда следует использовать структуры
- •Добавление распространенных элементов структур
- •Управление отдельной записью
- •Добавление структур в массивы
- •Перекрытие методов
- •Определение того, что следует защищать
- •Документирование компонентов программы
- •Разложение компонентов на функции
- •Оценка рисков
- •Аутентификация с использованием входа в Windows
- •Безопасность развертывания
- •Уязвимости сценариев
- •Наилучшие методы защиты приложений Web Forms
- •Получение данных
- •Настройка образца схемы базы данных
- •Подключение к источнику данных
- •Работа с визуальными инструментами
- •Написание кода для работы с данными
- •Использование Entity Framework
- •Где водится рыба: файловые потоки
- •Потоки
- •Читатели и писатели
- •Пример использования потока
- •Как это работает
- •Наконец-то мы пишем!
- •Использование конструкции using
- •Загрузка файла из Интернета
- •Регистрация сетевой активности
- •Графика
- •Перья
- •Кисти
- •Текст
- •Классы рисования и каркас .NET
- •Приступая к работе
- •Настройка проекта
- •Обработка счета
- •Создание подключения к событию
- •Рисование доски
- •Запуск новой игры

Использование Entity Framework
|
omp2З#.,)0# i!.#.( |
С.!,!,0# |
,(--i(,,(-(7,-1 |
|
|
- |
2!.bch#3 |
B(-,( п,!3 |
< |
(F(un |
||||||||||||||
( |
2(20 |
.())iF |
)# |
-!B#,(7,-1 |
i#6.1 |
-!2!3t |
э,! |
.-( |
,(2)0F |
.!.F!.( |
|
. |
!.)!3 |
|||||||||||
( |
,!3 |
6# ()f!,i(я(( |
|
г !-)!-)!i |
.,!2.#i( |
|
2(.. |
7B(#,-1 |
- |
)(-.#.!-()(( |
|
|
.! |
|||||||||||
,!,!# |
!2-16.(#,-1 |
|
- B(-,( |
rи |
omp2З#. ,)! |
!,(#),(,!-())!# |
|
|
.,!F,(ii(,!-()(# |
|
|
|||||||||||||
)( |
lМa |
i-.( |
1 |
-(- |
#-,b ..(-- |
- |
(i#)#i |
|
пpтSТН |
SТ |
|
<!,!,03Soim |
(i##, |
!.,#i |
||||||||||
.#.#))i# |
--!3-,-( |
( |
)(2!, |
..(--!- |
|
)(-.#.17t(F |
|
|
#F! |
,(.(F |
<(. |
|
НМrSrи |
|||||||||||
|
|
o |
SrnSopSr(eМimSr,! |
.,!-,! |
)# -1e#-,-1#, |
|
F!,!ch#F! |
|
-.!-!2( |
|
.!<(2(,b |
|||||||||||||
п,! !,)!ch#)(# |
|
- 2(2# .())0F |
,#.1я(!))!F! |
|
,(.(t |
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
-.( |
-i |
-!2.(.(,# |
|
2!.bch17 |
,(2.(я1 |
..1 |
|
пpтSТН |
SТ |
|
So-! --#i(r |
|
-!2i |
||||||||||
i!6)0i( |
,(.(i( |
|
--!3-,- |
( .,!-,! |
.!2(-(,# |
|
--!3-,-! |
|
|
|
B,!20и |
i!6)! |
||||||||||||
2i.! |
!,.(B(,b |
|
|
rnrSrН !, |
ernimSr- |
,(2.(я# |
|
21.#, |
i)!F! |
|
.1-,0F |
1B##.t |
-.( |
|||||||||||
-0 |
-!2.(#,# |
,(2.(я1 |
,!.b<! |
..1 |
--!3-,- |
)(F!.1t(F |
|
|
-1 - пpтSТН |
|
SТ |
oimrS( |
||||||||||||
2(,#i |
!,.#.b)! |
|
-!2.(#,# |
,(2.(я0 |
..1 |
|
|
НМrSr( |
eМim |
|
,! Sr-iт .#.(#,# |
|
2(21 |
|||||||||||
.())0F |
.!,( |
(,#.b)! |
-.!6 |
)!3t |
|
20,#ch(,b |
п,1 |
|
.,!2.#i1 |
|
и |
Т |
ьТ-!2.(.( |
|||||||||||
|
х |
|
гь |
Ч |
Ть |
d.!2(.b)! |
я#.b 2(. .7B(#,-1 |
- |
,!i |
|
B,!20 -)(B(.( |
-.,!#. |
||||||||||||
,(,!-(,b |
2(21 |
.())0F |
( 2(,#i |
(-,!i(,(B#-<( |
|
-!2.(,b |
|
!2З#.,)17 |
|
i!.#.b |
|
..1 |
||||||||||||
,(2!,0 |
|
- )#3 ( |
.! |
#,6(-(,b |
## (.,1(.b)!-,b |
|
.,( |
|
(2i#)#)(1F |
|
,(2.(яd |
|
|
|||||||||||
|
omp2З#.,)! ,(#),(,!-())(1 |
|
,#F)!.!F(1 |
|
х |
|
|
ьг |
Ч |
|
Ть-0.!.)1#, |
|
|
--!7 |
||||||||||
B(-,b |
,(2!,0 |
- |
п,!i |
.,!я#--# |
F#)#,(,11 |
.!),#.-, |
|
.!,!,03 |
|
i!6)! |
|
(-.!.b2!i |
||||||||||||
-(,b |
..1 |
--12( |
- .())0i( |
-.!-!2!i |
|
<!,!,0 |
|
2!.bch# |
.!F!6 |
|
)( |
!2З#<,)17 |
i!i |
|||||||||||
.#.bи B#i )( |
2421 .())0Fi |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Генерация объектной модели
wсрианаса оаР ивоиа лаРа РоннсцгОеол)ооаиосие)нлсннвичен засеn н)одп лснинеееооа)цод'нр)иви Роннсц
мвои ЧАСТЬ 3 l ожаоcниж аодгтв аот ревеиерииси

Создайте новый проект.
Я использовал проект Windows Forms под названием "EntityFramework':
2 . Щелкните правой кнопкой мыши на записи EntityFramework в обозрева теле решений Solution Explorer и выберите AddqNew ltem в контекстном меню. Выберите на левой панели папку Data.
Вы увидите диалоговое окно Add New ltem, показанное на рис. 24.1 3.
" Viщ-,1 с: lte,,,s Code O'гto General
V/indows Fcrms ,VPF
r- дSР.NП Core
L Scrvcr
!• OnJine
,Мarn Mode/1
Add New ltem - Entityframe, ork
|
ooМЕТryМ |
tИНu_ЕТ-i ЕТМyfЗ! |
|
|
EF 5.х Db(ontext Gen... Visual С# ltem5 |
||
|
EF б.х DbContut Gen... Vi;щ1I |
{;:; ltems |
|
|
Servicl!'-basedDatab"seVi!.udl |
(:t ltems |
|
Г"""'\ |
XML File |
Visual С ltem!. |
|
Phc-h |
|
Visuat (;: ltem |
|
CeXMl Schema |
|||
: |
XSLT F;1, |
Visual C:=ltem5 |
Туре: Vsu I (:r ttem
д projec: 1t for cre1tin9 an АОО.NП Entity D.;ta Model.
3.
4.
C,5Si:1, TU1iC,E.sFs11s2i sF5si[>;;i \.ci aA.ai
Выберите ADO.NET Entity Data Model и введите имя PartsDataЬase. Щел кните на кнопке Add.
Вы увидите диалоговое окно Entity Data Model Wizard, показанное на рис. 24.14.
Выберите пункт Choose Code First from Database в окне Choose Model Contents и щелкните на кнопке Next.
Мастер попросит вас выбрать подключение к базе данных. В этом случае вы должны увидеть всю необходимую информацию, потому что она уже была со здана для приложения AccessData.
5 . Выберите AdventureWorks2 0 1 2_Data . mdf из выпадающего списка Connection и щелкните на кнопке Next.
Если в списке нет AdventureWorks2 0 1 2_Data . mdf, обратитесь к разделу "Подключение к источнику данных': Если вы получаете сообщение с вопро сом, хотите ли вы скопировать базуданных в проект, выберите No. Как показа но на рис. 24.1 5, мастер попросит вас выбратьобъекты базы данных, которые вы хотите использовать.
6. Выберите Product и ProductCategory и оставьте имя по умолчанию. Щел кните на кнопке Finish.
ГЛАВА 24 Обращение к данным чбеt

Visual Studio сгенерирует для вас необходимый код. При работе с некоторыми версиями Visual Studio вы увидите канву конструктора классов, но поскольку работа с Class Designer - сложная тема, которая может потребовать! целой книги сама по себе, здесь мы ее не рассматриваем.
|
Choole Model Content1 |
|
|
|
|
o·, w, |
tu"t,ue, svВum, |
|
|
|
|
|
E"1pty Ef |
Ea,: od, |
Co n |
1 |
|
|
\ |
||||
|
Det!gnrr |
First mod I |
:;o: |
||
|
modtl |
0Y |
5b |
<! |
|
1 Crыt 11 mad in tl'lcEF Of igntr b1u:d cn an exirtiгg detabast, You can chcosethe dat·abase |
|
||||
' 1.Vrt1tc1,liu11, >,Нitt!J». fw1 llc fflUi.Jtt •r1U UctLC1tki>c uUjeo..l.!.- lu im.luUc: iн tl1c 111uUcl. Tl1c 1,l.:1:i.)a )'UUI |
|
d de ilennnnoooo r r rrr"d"
, applkttlon wi-1 intor1ct with 1re9entrotidfrom tht modeJ.
a U:.E<! 1bоер
-- __•_ J
Рис. 24. 14. Выберите метод создания модели Entity Framework
Entity Data Model Wizard
J(illkh dо\аЬм0Ьj1<11do У"" wont 10 lnclude 1n ,our model! 0611 Lo"tioa
G[}ПВ Prcduct
1111 PrcdvrtC t19ory
011 PrGdu CostНi tory
OIJ Prod1,1ctDt"ript1on
011 ProductDocumtnt
[111 Produ,;tlnv1ntory
Q(II P,odu.:tli.:tD,;c•HIФ:iry
01111 Produ<1Mod,I
Qgg Prod1,,1ctModtlll!ustrit1on
.__..- Pro u5!!'1 odr:IPrcauctDtscriptionCuturePluri,li:.e or ;ingul,rii:t:;..;;.; g1ner.!ltt-d objl!ct narnes
. 1oacdddel( 2.reviou!..;. '•i;:,
Рис. 24. 15. Выбор нескольких таблиц
538 ЧАСТЬ 3 Вопросы проектирования на С#

После того как база данных была аккуратно интегрирована в о6ьектную мо дель С#, вы можете кодировать с использованием объектов, представленных в этой новой модели. Для начала выполните следующие действия.
трврВернитесь к дизайнеру Forml и дважды щелкните на Forml, чтобы перей
ти к просмотру кода Code View.
тньВ обработчике события Forml_Load ( ) введите
= |
e "б w |
ырВeследующей строке введите part и обратитесь к lntelliSense.
Все столбцы таблицы Parts будут представлены в виде свойств класса.
То, что вы получили, - это контекст для дальнейшей работы. Никаких сложных запросов Linq, никакого встроенного SQL, никаких хранимых проце дур. Вы можете сделать все, что вам нужно, с помощью полученного объекта.
ГЛАВА 24 Обращение к данным жлЬА
