Nemiro.Data.Sql BaseObject
Пространство имён: Nemiro.Data.Sql
Сборка: Nemiro.Data (в Nemiro.Data.dll) Версия: 2.11.4.126 (2.11.4.126)
Тип 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, чтобы автоматически создавать более удобные классы для доступа к данным.