• Microsoft .NET
  • LINQ
  • Часто задаваемые вопросы о LINQ - часть вторая

Часто задаваемые вопросы о LINQ - часть вторая - Простой пример CRUD с помощью LINQ

ОГЛАВЛЕНИЕ

Простой пример CRUD с помощью LINQ

Шаг 1: Создать сущность класса «Клиент»

На первом шаге создается сущность класса «Клиент», как показано в следующем фрагменте кода.

[Table(Name = "Customer")]
public class clsCustomerEntity
{
private int _CustomerId;
private string _CustomerCode;
private string _CustomerName;

[Column(DbType = "nvarchar(50)")]
public string CustomerCode
{
set
{
_CustomerCode = value;
}
get
{
return _CustomerCode;
}
}

[Column(DbType = "nvarchar(50)")]
public string CustomerName
{
set
{
_CustomerName = value;
}
get
{
return _CustomerName;
}
}

[Column(DbType = "int", IsPrimaryKey = true,IsDbGenerated=true)]
public int CustomerId
{
set
{
_CustomerId = value;
}
get
{
return _CustomerId;
}
}
}

Шаг 2: Создание (create) с помощью LINQ

Создать контекст данных

Сначала создается объект ‘datacontext’ с использованием строки подключения.

DataContext objContext = new DataContext(strConnectionString);

Установить данные для вставки

Следующий шаг после создания подключения с помощью объекта ‘DataContext’ – создать объект-сущность «Клиент» и присвоить данные свойству объекта.

clsCustomerEntity objCustomerData = new clsCustomerEntity();
objCustomerData.CustomerCode = txtCustomerCode.Text;
objCustomerData.CustomerName = txtCustomerName.Text;

Сделать обновление в памяти

Затем делается обновление в памяти в самих объектах-сущностях с помощью метода ‘InsertOnSubmit’.

objContext.GetTable<clsCustomerEntity>().InsertOnSubmit(objCustomerData);

Сделать конечную физическую фиксацию

Наконец, делается физическая фиксация в реальной базе данных. Помните, что пока не вызван ‘SubmitChanges()’, данные не зафиксированы окончательно в базе данных.

objContext.SubmitChanges();

Окончательный код

Ниже приведен окончательный собранный код LINQ.

DataContext objContext = new DataContext(strConnectionString);
clsCustomerEntity objCustomerData = new clsCustomerEntity();
objCustomerData.CustomerCode = txtCustomerCode.Text;
objCustomerData.CustomerName = txtCustomerName.Text;
objContext.GetTable<clsCustomerEntity>().InsertOnSubmit(objCustomerData);
objContext.SubmitChanges();

Шаг 3: Обновление (update) с помощью LINQ

Возьмем следующую операцию базы данных, т.е. «Обновить».

Создать контекст данных

Как обычно, сначала надо создать объект ‘datacontext’ с помощью строки подключения, как сказано в шаге «Создать».

DataContext objContext = new DataContext(strConnectionString);

Выбрать объект LINQ пользователь, который надо обновить

Получить путем запроса LINQ объект LINQ, который надо обновить

var MyQuery = from objCustomer in objContext.GetTable<clsCustomerEntity>()
where objCustomer.CustomerId == Convert.ToInt16(txtCustomerId.Text)
select objCustomer;

Наконец, установить новые значения и обновить данные в физической базе данных

Делаются обновления и вызывается ‘SubmitChanges()’ для осуществления окончательного обновления.

clsCustomerEntity objCustomerData = (clsCustomerEntity)MyQuery.First<clsCustomerEntity>();
objCustomerData.CustomerCode = txtCustomerCode.Text;
objCustomerData.CustomerName = txtCustomerName.Text;
objContext.SubmitChanges();

Окончательный код «Обновить на LINQ»

Ниже показано, как выглядит окончательный запрос на обновление на LINQ.

DataContext objContext = new DataContext(strConnectionString);
var MyQuery = from objCustomer in objContext.GetTable<clsCustomerEntity>()
where objCustomer.CustomerId == Convert.ToInt16(txtCustomerId.Text)
select objCustomer;
clsCustomerEntity objCustomerData = (clsCustomerEntity)MyQuery.First<clsCustomerEntity>();
objCustomerData.CustomerCode = txtCustomerCode.Text;
objCustomerData.CustomerName = txtCustomerName.Text;
objContext.SubmitChanges();

Шаг 4: Удаление (Delete) с помощью LINQ

Рассмотрим следующую операцию базы данных – «Удалить».

DeleteOnSubmit

Не разбираются предыдущие шаги, такие как создание контекста данных и выбор объекта LINQ, они объяснены в предыдущем разделе. Чтобы удалить объект из памяти, надо вызвать ‘DeleteOnSubmit()’, а для удаления из конечной базы данных надо использовать ‘SubmitChanges()’.

objContext.GetTable<clsCustomerEntity>().DeleteOnSubmit(objCustomerData);
objContext.SubmitChanges();

Шаг 5: Понятные без пояснений выборка (select) и чтение (read) на LINQ

На последнем шаге объект LINQ выбирается и читается по условию. Ниже приведен фрагмент кода, показывающий, как запустить запрос LINQ и присвоить значение объекта пользовательскому интерфейсу ASP.NET.

DataContext objContext = new DataContext(strConnectionString);

var MyQuery = from objCustomer in objContext.GetTable<clsCustomerEntity>()
where objCustomer.CustomerId == Convert.ToInt16(txtCustomerId.Text)
select objCustomer;

clsCustomerEntity objCustomerData = (clsCustomerEntity)MyQuery.First<clsCustomerEntity>();
txtCustomerCode.Text = objCustomerData.CustomerCode;
txtCustomerName.Text = objCustomerData.CustomerName;