Часто задаваемые вопросы о 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();

Итоговый код create на LINQ

Ниже приведен итоговый собранный код 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

Рассматривается следующая операция над базой данных, т. е. update.

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

Как обычно, сначала надо создать объект DataContext с использованием строки подключения, как сказано в шаге create.

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 update

Ниже показан итоговый код запроса LINQ update:

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

Рассматривается следующая операция над базой данных –  delete.

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;