Linq to SQL Intro

LINQ to SQL представляет технологию доступа и управления реляционными данными. Данная технология позволяет составлять запросу к бд в удобной форме в с помощью операторов LINQ, которые затем трансформируются в sql-выражения. Ключевыми объектами здесь являются сущности, которые хранятся в базе данных, контекст данных и запрос LINQ.

Чтобы задействовать LINQ to SQL в проекте, нам надо добавить библиотеку System.Data.Linq.dll:

Для взаимодействия с базой данных в LINQ to SQL используются модели и контекст данных. Модели представляют собой обычные классы, которые сопоставляются с одной из таблиц в базе данных. Пусть у нас есть некоторая база данных usersdb, в которой определена следующая таблица Users:

То есть в таблице Users есть три столбца: Id(тип int), Name(тип nvarchar) и Age(тип int).

Сначала определим сущность для работы с данными из этой таблицы:

Атрибут [Table] позволяет выполнить сопоставление таблицы из бд с данной моделью. Однако по умолчанию модель должна называться также, как и таблица, то есть Users. Поэтому, чтобы сопоставление прошло успешно, в атрибуте Table указывается свойство Name с именем таблицы.

Каждое свойство модели соответствует столбцу по типу данных. Чтобы происходило автоматическое сопоставление, над свойствами применяется атрибут [Column]. Без данного атрибута система не сможет связать столбец из таблицы со свойством.

Данный атрибут имеет ряд свойств, с помощью которого можно настроить сопоставление столбца:

  • AutoSync: указывает, как надо извлекать значение столбца после вставки или обновления
  • CanBeNull: указывает, может ли столбец принимать значение null
  • DbType: определяет тип столбца. Указывается, если надо создать новую базу данных
  • Expression: хранит выражение, которое будет использоваться для вычисления значения свойства
  • IsPrimaryKey: хранит логическое значение и указывает, выполняет ли столбец роль первичного ключа (как в данном случае Id)
  • IsDbGenerated: хранит логическое значение, которое указывает, будет ли значение столбца генерироваться самой бд
  • IsDiscriminator: указывает, будет ли столбец разграничителем в системе наследования классов
  • IsVersion: указывает, будет ли столбец хранить номер версии строки или значение timestamp, которое указывает на время последнего изменения строки
  • Name: задает имя столбца, с которым будет сопоставляться данное свойство
  • Storage: указывает на имя приватной переменной, которая будет хранить значение данного столбца
  • UpdateCheck: определяет, как LINQ to SQL будет решать проблему параллелизма. Если в модели нет свойств со значение IsVersion=true, то операциях с данными БД будет сравнивать значения строк из таблицы со новыми значениями.

В данном случае название свойства отличается от названия столбца, поэтому в атрибуте надо указать свойство Name, котором передается название столбца, как тут: свойство FirstName будет сопоставляться со столбцом Name.

В данном случае название свойства отличается от названия столбца, поэтому в атрибуте надо указать свойство Name, котором передается название столбца, как тут: свойство FirstName будет сопоставляться со столбцом Name.

В классе программы определим следующий код:

Сначала создается контекст данных, который представлен объектом DataContext. В конструктор этого класса передается строка подключения. Через контекст данных мы будем работать с базой данных.

Затем мы получаем таблицу Users:

Фактически здесь мы загружаем все строки из базы данных, которые преобразуются в объекты User:

This entry was posted in C#. Bookmark the permalink.

Leave a Reply