Практическое занятие 8. Использование LINQ to SQL
LINQ to SQL является удобным инструментом для разработчиков, которым необязательно сопоставление с концептуальной моделью. Использование LINQ to SQL дает возможность напрямую использовать модель программирования LINQ с существующей схемой базы данных. LINQ to SQL позволяет разработчикам формировать классы .NET Framework для представления данных. Вместо сопоставления с концептуальной моделью эти созданные классы указывают напрямую на таблицы базы данных, представления, хранимые процедуры и определяемые пользователем функции.
В LINQ to SQL объектная модель, выраженная на языке программирования разработчика, сопоставляется модели данных реляционной базы данных. После этого операции с данными выполняются в соответствии с объектной моделью.
Для создания объектной модели для базы данных, классы должны быть приведены в соответствие с сущностями, хранящимися в базе данных.
Можно выделить три способа реализации такого приведения: задавать атрибуты для существующих объектов самостоятельно, т.е. написать код для атрибута вручную, использовать конструктор, позволяющий автоматически сгенерировать объекты и использовать утилиту командной строки SQLMetal.
Упражнение 1. Создание объектной модели
В упражнении рассматривается способ создания объектной модели для базы данных: задание атрибутов для существующих объектов кодированием вручную.
1. Создайте новое WinForms-приложение (назовите его LINQsql_1).
|
|
2. На форму перенесите кнопку и ListBox.
3. Добавьте ссылку на сборку System.Data.Linq и директивы подключения требуемых пространств имен:
using System.Data.Linq;
using System.Data.Linq.Mapping;
4. Создайте класс сущностей (лучше в отдельном файле) Customer и для связывания его с таблицей базы данных к объявлению класса добавьте атрибут Table:
[Table(Name = "Customers")]
public class Customer
{
}
5. В классе назначьте свойства CustomerID и City для представления столбцов базы данных, для этого укажите атрибут Column:
private string _CustomerID;
[Column(IsPrimaryKey = true, Storage = "_CustomerID")]
public string CustomerID
{
get
{
return this._CustomerID;
}
set
{
this._CustomerID = value;
}
}
private string _City;
[Column(Storage = "_City")]
public string City
{
get
{
return this._City;
}
set
{
this._City = value;
}
}
6. Переопределите метод ToString():
public override string ToString()
{
return CustomerID + "\t" + City;
}
7. В обработчике события Click для кнопки реализуйте следующую функциональность:
a. Создайте объект класса DataContext, который задает входную точку в базу данных, и в качестве параметра конструктора укажите строку подключения к базе Northwind:
|
|
DataContext db = new DataContext
(@"Data Source=(local);Initial Catalog=Northwind;Integrated Security=True");
b. Для объекта класса DataContext используйте метод GetTable, который возвращает коллекцию определенного типа, в данном случае типа Customer и составьте запрос для вывода в ListBox список идентификаторов и городов проживания тех заказчиков, которые живут в Лондоне:
var results = from c in db.GetTable<Customer>()
where c.City == "London"
select c;
foreach (var c in results)
listBox1.Items.Add(c.ToString());
8. Запустите и протестируйте приложение. По клику кнопки будут выведены идентификаторы и города проживания тех заказчиков, которые живут в Лондоне.
Упражнение 2. Создание связей в базе данных
В данном упражнении демонстрируется использование ассоциаций LINQ to SQL для представления связей внешних ключей в базе данных.
Будут решены следующие основные задачи:
- Добавление класса сущности, который представляет таблицу "Orders" в базе данных "Northwind".
- Добавление примечаний к классу Customer, чтобы расширить связи между классами Customer и Order.
- Создание и выполнение запроса для тестирования процесса получения сведений о классе Order с помощью класса Customer.
1. Откройте приложение, созданное в прошлом упражнении.
|
|
2. После определения класса Customer (лучше в отдельном файле) создайте определение класса сущностей Order, включающее следующий код, который указывает, что свойство Order.Customer связано как внешний ключ со свойством Customer.CustomerID:
[Table(Name = "Orders")]
public class Order
{
private int _OrderID = 0;
private string _CustomerID;
private EntityRef<Customer> _Customer;
public Order() { this._Customer = new EntityRef<Customer>(); }
[Column(Storage = "_OrderID", DbType = "Int NOT NULL IDENTITY",
IsPrimaryKey = true, IsDbGenerated = true)]
public int OrderID
{
get { return this._OrderID; }
// No need to specify a setter because IsDBGenerated is
// true.
}
[Column(Storage = "_CustomerID", DbType = "NChar(5)")]
public string CustomerID
{
get { return this._CustomerID; }
set { this._CustomerID = value; }
}
[Association(Storage = "_Customer", ThisKey = "CustomerID")]
public Customer Customer
{
get { return this._Customer.Entity; }
set { this._Customer.Entity = value; }
}
}
3. Если был создан отдельный файл, то добавьте директивы подключения требуемых пространств имен:
using System.Data.Linq;
using System.Data.Linq.Mapping;
4. Добавьте примечания к классу Customer, чтобы указать его связь с классом Order. Вставьте следующий код в класс Customer:
private EntitySet<Order> _Orders;
public Customer()
{
this._Orders = new EntitySet<Order>();
}
[Association(Storage = "_Orders", OtherKey = "CustomerID")]
|
|
public EntitySet<Order> Orders
{
get { return this._Orders; }
set { this._Orders.Assign(value); }
}
5. Удалите компонент ListBox и добавьте компонент ListView.
6. Настройте ListView для дальнейшей работы: в свойстве Columns добавьте три столбца с заголовками (свойство text): CustomerID, City и OrdersCount, свойству View установите вид отображения Details.
7. В обработчике события Click кнопки измените запрос, и реализуйте вывод результата в таблицу компонента listView:
var custQuery =
from cust in db.GetTable<Customer>()
where cust.Orders.Any()
select cust;
foreach (var custObj in custQuery)
{
ListViewItem item =
listView1.Items.Add(custObj.CustomerID.ToString());
item.SubItems.Add(custObj.City.ToString());
item.SubItems.Add(custObj.Orders.Count.ToString());
}
8. Запустите и протестируйте приложение. По клику кнопки таблица заполнится данными о заказчиках и количество сделанных ими заказов.
Дата добавления: 2019-02-26; просмотров: 203; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!