Лабораторная работа 12

advertisement
Министерство образования Республики Беларусь
Министерство образования и науки Российской Федерации
ГУВПО “Белорусско-Российский университет”
Кафедра “Программное обеспечение информационных технологий”
Дисциплина “Объектно-ориентированное программирование
и проектирование”
Лабораторная работа № 12
Работа с базами данных
с использованием технологии ADO.NET Entity Framework
Время выполнения работы – 4 часа
2014
1 Цель работы
Ознакомление с основой разработки Windows-приложений на языке C# для работы с базами данных на основе технологии ADO.NET Entity Framework.
2 Техническое обеспечение
2.1 Персональная ЭВМ IBM Pentium IV и более поздних моделей c оперативной памятью не менее 512 Мбайт.
2.2 Клавиатура.
2.3 Дисплей.
2.4 Манипулятор типа “мышь”.
3 Программное обеспечение
3.1 Операционная система Windows XP SP 3 более поздние версии Windows.
3.2 Система программирования Microsoft Visual Studio 2008 и более поздние
версии.
4 Постановка задачи
2
Разработать Windows-приложение WPF для базы данных СУБД Microsoft SQL
Server, реализованной согласно варианта задания, которые приведены в прилагаемых
файлах.
5 Доступ к базе данных
5.1 Связывание данных с элементом управления в WPF
WPF предоставляет в распоряжение программиста гораздо больше возможностей для форматирования, чем Windows Forms, однако в примере, приведенном далее, мы будем выводить на экран данные в том же формате, что и раньше. Полный
текст примера находится в проекте DatabindingWPF в коде, сопровождающем эту работу.
Вначале напишем на языке XAML (Extensible Application Markup Language,
расширяемый язык разметки приложений) код для окна:
<Window х:Class="DataBindingWPF.Windowl"
xmlns = "http: / /schemas .microsoft.
com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Data Binding Demo (WPF)" Height="301" Width="477">
<Grid>
<ListView Name="listViewl">
<ListView.View>
<GridView>
<GridViewColumn Header="ID" Width="3 5"
DisplayMemberBinding="{Binding Path=BookID}"/>
<GridViewColumn Header="Title" Width="2 00"
DisplayMemberBinding="{Binding Path=Title}"/>
<GridViewColumn Header="Published" Width="70"
DisplayMemberBindings"{Binding Path=PublishYear}"/>
</GridView>
</ListView.View>
</ListView>
</Grid>
</Window>
А теперь  код программы:
3
public partial class Windowl : Window
{
DataSet _dataSet;
public Windowl ()
{
InitializeComponent();
_dataSet = CreateDataSet();
listViewl.DataContext = _dataSet.Tables["Books"];
Binding binding = new Binding();
listViewl.SetBinding(ListView.Iterns SourceProperty, binding);
}
protected override void
OnClosing(System.ComponentModel.CancelEventArgs e)
{
_dataSet.Dispose();
}
private DataSet CreateDataSet()
{
string connectionString = ©"Data source=BEN-DESKTOP\SQLEXPRESS;
Initial Catalog=TestDB;Integrated Security=SSPI";
using (SqlConnection conn =
new SqlConnection(connectionString))
{
conn.Open();
using (SqlCommand cmd =
new SqlCommand("SELECT * FROM Books", conn))
using (SqlDataAdapter adapter = new SqlDataAdapter())
{
adapter.TableMappings.Add("Table", "Books");
adapter.SelectCommand = cmd;
DataSet dataSet = new DataSet("Books");
// Поместить все строки в набор данных
adapter.Fill(dataSet) ;
return dataSet;
}
}
}
}
На рис. 1 изображена WPF-версия элемента управления DataGrid с информацией из базы данных. Технология WPF позволяет связывать значения в любом элементе управления с источником данных
5.2 Автоматическое отображение данных на объекты с помощью
платформы Entity Framework
4
Задача. Вы хотите обращаться к базе данных при посредстве объектов платформы .NET, не создавая собственную библиотеку объектов данных.
Решение. Воспользуйтесь платформой Entity Framework. Она позволяет автоматически отображать таблицы базы данных и их отношения на объекты, которые
можно использовать в коде С#.
По сути, Entity Framework является библиотекой объектно-реляционного сопоставления. Она создана корпорацией Microsoft и полностью интегрируется в Visual
Studio.
Чтобы создать объект для таблицы Books, представленной ранее в этой главе,
выполните следующие шаги:
1) Сделайте щелчок правой кнопкой мыши по имени проекта и выберите
Add (Добавить), New Item (Новый элемент).
2) Выберите ADO.NET Entity Data Model (Модель данных ADO.NET
Entity) и дайте ей имя Books.edmx. Щелкните по Add (Добавить).
3) В Мастере Entity Data Model Wizard, который при этом появится, выберите Generate From Database (Сгенерировать по базе данных) и щелкните по Next (Далее).
4) Выберите базу данных в раскрывающемся списке.
5) В качестве значения для Save entity connection settings in App.Config as
(Сохранить настройки соединения сущности в App.Config как) укажите
BookEntities
6) Щелкните по Next (Далее).
7) Установите флажок у таблицы Books.
8) В качестве значения для Model Namespace (Пространство имен модели)
укажите BookModel и щелкните по Finish (Готово).
9) В результате будут созданы объекты Book и BookEntities. В следующих
разделах приводятся примеры работы с ними.
5.2.1 Получение списка всех сущностей
Объект представляет интерфейс и коллекции. В следующем примере выводятся
все значения таблицы, для чего используется коллекция сущностей:
// Получить список всех сущностей
BookEntities entities = new BookEntities();
foreach (var book in entities.Books)
{
Console.WriteLine("{0}, {1} {2}", book.ID, book.Title,
book.PublishYear);
}
Этот код выводит:
Les Miserables 1862
Notre-Dame de Paris 1831
Le Rhin 1842
5.2.2 Создание новой сущности
Чтобы создать новую сущность Book, просто объявите объект, установите значения его свойств, а затем добавьте его в коллекцию сущностей. В нашем примере
свойство id инкрементируется автоматически, так что устанавливать его значение не
нужно.
BookEntities entities = new BookEntities();
Book newBook = new Book();
newBook.Title = "C# 4 How-to";
newBook.PublishYear = 2010;
entities.AddToBooks(newBook); entities.SaveChanges();
5.2.3 Поиск сущности
Для создания запросов можно воспользоваться классом
objectQuery<T>: ObjectQuery<Book> bookQuery =
new ObjectQuery<Book>(
"SELECT VALUE Book FROM BookEntities.Books AS Book",
entities).Where("it.ID = 1");
Впрочем, выражения быстро становятся громоздкими. В этом случае лучше использовать механизм LINQ. Эквивалентный запрос будет выглядеть примерно так:
5
var books = from book in entities.Books
where book.ID == 1
select book;
5.2.4 Удаление сущности
Чтобы удалить сущность, передайте ее методу DeleteObject объекта, представляющего список сущностей:
BookEntities entities = new BookEntities();
// Создать новую сущность Book newBook = new Book () ;
newBook.Title = "C# 4 How-to";
newBook.PublishYear = 2010;
entities.AddToBooks(newBook);
entities.SaveChanges();
entities.DeleteObject(newBook); entities.SaveChanges();
6 Литература
1. Нейгел, Кристиан. C# 4.0 и платформа .NET 4 для профессионалов.: пер. с
англ./ Кристиан Нейгел, Билл Ивьен, Джей Глинн, Карли Уотсон. – М.: Вильямс,
2011. – 1440 с.
2. Зиборов, В. В. Visual C# 2010 на примерах/ В. В. Зиборов. – СПб.: БХВПетербург, 2011. – 432 с.
Download