BaseObject - классNemiro.Data.dll
Базовый класс, реализующий объектно-ориентированный доступ к данным (Object-Relational Mapping, ORM).
Иерархия наследования

System Object
  Nemiro.Data.Sql BaseObject

Пространство имён: Nemiro.Data.Sql
Сборка: Nemiro.Data (в Nemiro.Data.dll) Версия: 2.11.4.126 (2.11.4.126)
Синтаксис

public abstract class BaseObject

Тип BaseObject предоставляет следующие члены.

Конструкторы

  ИмяОписание
Открытый методBaseObject 
Вызывается из конструкторов производных классов, чтобы инициализировать класс BaseObject со значениями по умолчанию.
Открытый методBaseObject(DataRow)
Вызывается из конструкторов производных классов, чтобы инициализировать класс BaseObject на основе указанной строки данных.
Открытый методBaseObject(Object)
Вызывается из конструкторов производных классов, чтобы инициализировать класс BaseObject на основе данных из базы данных по указанному идентификатору.
Открытый методBaseObject(Object, CacheInfo)
Вызывается из конструкторов производных классов, чтобы инициализировать класс BaseObject на основе данных из базы данных по указанному идентификатору с использованием заданных параметров кэширования.
Открытый методBaseObject(Object, Int32)
Вызывается из конструкторов производных классов, чтобы инициализировать класс BaseObject на основе данных из базы данных по указанному идентификатору с использованием кэширования.
Защищённый методBaseObject(DataRow, Object, Int32, CacheInfo)
Вызывается из конструкторов производных классов, чтобы инициализировать класс BaseObject со значениями, указанными в параметрах.
В начало страницы
Методы

  ИмяОписание
Открытый методCreateTable
Создает в базе данных таблицу на основе схемы, описанной в экземпляре производного класса.
Открытый методDelete
Удаляет данные производного класса из базы данных.
Открытый методEquals
Определяет, равен ли заданный объект Object текущему объекту Object.
(Унаследован от Object.)
Открытый методExists
Проверяет существование данных в базе данных и возвращает True, если данные существуют, в противном случае - False.
Защищённый методFinalize
Позволяет объекту Object попытаться освободить ресурсы и выполнить другие операции очистки, перед тем как объект Object будет утилизирован в процессе сборки мусора.
(Унаследован от Object.)
Открытый методGetChanges
Возвращает информацию об изменении значений полей. Имеет смысл использовать только совместно с методом Load .
Открытый методGetHashCode
Играет роль хэш-функции для определенного типа.
(Унаследован от Object.)
Открытый методСтатический членGetList
Возвращает коллекцию экземпляров производного класса записей БД.
Открытый методGetType
Возвращает объект Type для текущего экземпляра.
(Унаследован от Object.)
Открытый методLoad 
Загружает в производный класс данные из базы данных по ключевому полю, либо уникальным полям.
Открытый методLoad(DataRow)
Загружает в производный класс данные из указанного экземпляра DataRow.
Открытый методLoadJson
Загружает данные из JSON в экземпляр производного класса.
Открытый методLoadXml(String)
Загружает данные из XML-документа в экземпляр производного класса.
Открытый методLoadXml(String, Encoding)
Загружает данные из XML-документа в экземпляр производного класса с использованием определенной кодировки.
Защищённый методMemberwiseClone
Создает неполную копию текущего объекта Object.
(Унаследован от Object.)
Открытый методSave
Сохраняет данные производного класса класса в базу данных.
Открытый методTableExists
Проверяет существование в базе данных таблицы, описанной в экземпляре производного класса.
Открытый методToJson
Сериализует экземпляр производного класса в JSON.
Открытый методToString
Возвращает экземпляр производного класса в виде строки в формате JSON.
(Переопределяет Object ToString .)
Открытый методToXml 
Сериализует экземпляр производного класса в XML.
Открытый методToXml(Encoding)
Сериализует экземпляр производного класса в XML с использованием определенной кодировки.
Открытый методToXml(Encoding, Formatting)
Сериализует экземпляр производного класса в XML с использованием определенной кодировки и параметров форматирования xml-документа.
В начало страницы
Свойства

  ИмяОписание
Открытое свойствоCache
Предоставляет доступ к параметрам кэширования данных.
Открытое свойствоCacheDuration
Продолжительность хранения записи в кэше, в секундах. Если это свойство имеет значение 0 или меньше, кэширование не выполняется.
Открытое свойствоConnectionString
Строка соединения с базой данных. Либо имя строки соединения в файле конфигурации (*.config). Значение по умолчанию: LocalSqlServer.
Открытое свойствоRowData
Получает строку данных, на основе которой построен текущий экземпляр объекта.
Открытое свойствоTableName
Содержит имя таблицы объекта.
В начало страницы
Заметки

От этого класса должны наследоваться все объекты, через которые необходимо осуществлять взаимодействие с базой данных SQL Server.

Классы ORM можно создавать вручную, либо при помощи программы DB2Class3, которую можно найти на страничке проекта: http://data.nemiro.net

Работа с данными в базовом классе BaseObject реализуется при помощи SqlClient.

По умолчанию используется строка соединения LocalSqlServer. В качестве ConnectionString можно указывать, как саму строку соединения, так и имя параметра в файле конфигурации. В web-приложениях строка соединения с именем LocalSqlServer иметь путь к SQL Server по умолчанию. Для использования параметра LocalSqlServer в веб-приложениях со своей базой данных, которая отличается от базы по умолчанию, необходимо удалить LocalSqlServer из файла конфигурации и добавить заново (написать код удаления и добавления):

<remove name="LocalSqlServer"/> 
<add 
  name="LocalSqlServer" 
  connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=example;Trusted_Connection=True;" 
/>

Если указана строка соединения в перегрузке атрибута TableAttribute, то она будет использоваться при доступе к базе данных.

Примеры

В следующем примере показано воплощение в классе Users одноименной таблицы.

using System;
using System.Collections.Generic;
using Nemiro.Data;
using Nemiro.Data.Sql;
using System.Data;

[Table("users")]
public class Users : BaseObject
{

  [Column("id_users", SqlDbType.Int, ColumnAttributeFlags.PrimaryKey | ColumnAttributeFlags.Identity)]
  public int IdUsers { get; set; }

  [Column("first_name", SqlDbType.NVarChar, Size = 50)]
  public string FirstName { get; set; }

  [Column("last_name", SqlDbType.NVarChar, Size = 50)]
  public string LastName { get; set; }

  [Column("email", SqlDbType.VarChar, Size = 100)]
  public string Email { get; set; }

  [Column("phone", SqlDbType.VarChar, Size = 30)]
  public string Phone { get; set; }

  [Column("sex", SqlDbType.Char, Size = 1)]
  public string Sex { get; set; }

  [Column("birthday", SqlDbType.DateTime, ColumnAttributeFlags.AllowNull)]
  public DateTime? Birthday { get; set; }

  [Column("date_created", SqlDbType.DateTime, Default = ColumnDefaultValues.Now)]
  public DateTime DateCreated { get; set; }

}

Теперь, когда есть класс реализующий доступ к таблице users, можно работать с данными через этот объект.

Если таблица users в базе данных не существует, её можно легко создать, как показано в следующем примере.

// создаем экземпляр класса Users
Users u = new Users();
// проверяем существование таблицы в базе данных 
if (!u.TableExists())
{
  // таблицы не существует, создаем
  u.CreateTable();
}

Однако, постоянно проверять существование таблиц в базе данных не рекомендуется, т.к. эта операция занимает определенное время. Это можно сделать один раз, например, при запуске приложения, если речь идет о веб-проекте. В приложениях Windows, подобный метод создания таблиц можно реализовать, например, при установке приложения.

Работа непосредственно с данными осуществляется при помощи трех простых методов: Load , Save  и Delete .

В следующем примере показано добавление в таблицу users двух пользователей. Данные добавляются после вызова метода Save .

// создаем экземпляр класса Users
Users u = new Users();
// указываем данные пользователя
u.FirstName = "Василий";
u.LastName = "Пупкин";
u.Sex = "M";
u.Email = "pupkin@example.org";
u.Birthday = new DateTime(1980, 1, 1);
// сохраняем пользователя в базе данных
u.Save();

// выводим результат
Console.WriteLine("Пользователь успешно сохранен в базу. Идентификатор пользователя: {0}", u.IdUsers);

// создаем экземпляр класса Users
u = new Users();
// указываем данные пользователя
u.FirstName = "Маша";
u.LastName = "Иванова";
u.Sex = "F";
u.Email = "ivanova@example.org";
u.Birthday = new DateTime(1985, 10, 15);
// сохраняем пользователя в базе данных
u.Save();

// выводим результат
Console.WriteLine("Пользователь успешно сохранен в базу. Идентификатор пользователя: {0}", u.IdUsers);

Каждая запись в базе данных имеет уникальный идентификатор - ключ. В нашем случае, ключом является поле id_users таблицы users. В классе Users об этом свидетельствуют атрибуты PrimaryKey и Identity. После добавления пользователя в базу, свойство IdUsers экземпляра класса Users получает из базы значение идентификатора записи. По этому идентификатору можно получить доступ к данным конкретного пользователя.

// создаем экземпляр класса Users
Users u = new Users();
// указываем в ключевое поле идентификатор пользователя
u.IdUsers = 1;
// загружаем в класс данные пользователя по указанному идентификатору
u.Load();

// выводим полученные данные пользователя в консоль
Console.WriteLine("Имя:\t\t {0} {1}", u.FirstName, u.LastName);
Console.WriteLine("Пол:\t\t {0}", u.Sex);
Console.WriteLine("Дата рождения:\t {0}", u.Birthday.Value.ToShortDateString());
Console.WriteLine("Email:\t\t {0}", u.Email);

Когда указан идентификатор, вызов метода Save  не будет создавать новую запись, а сохранит изменения в загруженной записи.

// создаем экземпляр класса Users
Users u = new Users();
// указываем в ключевое поле идентификатор пользователя
u.IdUsers = 1;
// загружаем в класс данные пользователя по указанному идентификатору
u.Load();
// после вызова метода Load, можно проверить,  
// были ли получены данные или нет 
if (u.IdUsers <= 0)
{
  // идентификатор обнулен, значит данные в базе не найдены
  Console.WriteLine("Пользователь не найден.");
  return; // выходим из программы
}
// данные пользователя успешно получены 
// выводим в консоль идентификатор 
Console.WriteLine("Получены данные для пользователя: {0}", u.IdUsers);
// меняем данные пользователя
u.FirstName = "Федя";
u.LastName = "Петров";
// сохраняем данные пользователя
u.Save();
// выводим в консоль идентификатор сохраненного пользователя
Console.WriteLine("Данные пользователя {0} успешно записаны в базу", u.IdUsers);

Базовый класс BaseObject имеет перегрузки, которые позволяют еще больше упростить доступ к данным.

Используйте программу DB2Class3, чтобы автоматически создавать более удобные классы для доступа к данным.

См. также