NlSql - ORM-библиотека с автогенерацией визуального слоя
NlSql – библиотека, которая позволит вам значительно сократить время разработки сайта или информационной системы. Достаточно лишь описать класс – NlSql автоматически создаст все остальное: таблицы в базе данных, формы ввода данных, графические таблицы с возможностями редактирования. Поддерживаются Windows- и Web-приложения.
Краткая экскурсия по возможностям библиотеки
Работа с базой данных
Работать с библиотекой очень просто. Описываем класс:
[NlSqlClass("Люди")]
public class Person : NlSqlObject
{
private string _fio;
[NlSqlProperty("ФамилияИ.О.")]
public string Fio
{
get { return _fio; }
set { _fio = value; }
}
private DateTime _birthDay;
[NlSqlProperty("Датарождения")]
public DateTime BirthDay
{
get { return _birthDay; }
set { _birthDay = value; }
}
// Поддерживаются ссылки "один ко многим" на другие классы
private City _city;
[NlSqlProperty("Город")]
public City City
{
get { return _city; }
set { _city = value; }
}
// Поддерживаются ссылки "многое ко многим" на другие классы
private List<Interest> interests = new List<Interest>();
[NlSqlProperty("Интересы")]
public List<Interest> Interests
{
get { return interests; }
set { interests = value; }
}
}
Те свойства, которые необходимо отражать в базе данных и формах ввода, снабжаются дополнительными атрибутами (NlSqlProperty). Поддерживаются ссылки на другие классы, описанные таким же образом. Всю работу по представлению объектов в базе данных берет на себя NlSql.
Теперь можно создать объект этого класса и вызвать метод, создающий необходимые таблицы в базе данных:
Person ivan = new Person();
ivan.CheckFieldsInSql(); // Создаем таблицы в базе данных
Таблица для класса Person и для классов City и Interest, на которые он ссылается, успешно созданы:
Обратите внимание, что также автоматически создана связующая таблица для связи типа «многое ко многим».
В таблицах созданы колонки в соответствии с свойствами класса:
Теперь можно заполнить объект и вставить его в базу данных:
ivan.Fio = "Иванов И.И.";
ivan.BirthDay = DateTime.Parse("30-10-1983");
ivan.InsertIntoSql();
После выполнения команды вставки объект записался в базу данных:
Создадим город и вставим его в базу данных:
City moscow = new City();
moscow.Name = "Москва";
moscow.InsertIntoSql();
И теперь укажем, что созданный ранее человек (Иванов И.И.) проживает в Москве, а затем обновим запись о нем в базе данных:
ivan.City = moscow;
ivan.UpdateInSql();
Посмотрим на результат – появилась ссылка на строчку из таблицы City:
При дальнейшей работе можно также загружать объекты из базы данных:
ivan.Id = 1;
ivan.LoadFromSql();
И удалять их в базе:
ivan.DeleteInSql();
В базовом классе NlSqlObject существует метод GetList, который позволяет получить несколько объектов, добавив, при необходимости, фильтры:
// Выбрать людей, которые старше 5 лет и младше 18
List<Person> children = Person.GetList<Person>(new WhereAnd(
new WhereElementary(WhereElementaryType.More, "Age", 5),
new WhereElementary(WhereElementaryType.Less, "Age", 18)));
Работа с формами ввода
Библиотека позволяет генерировать формы ввода автоматически, причем поддерживается Winforms и Webforms.
Создадим форму ввода на для объектов класса Person. Для этого используем класс NlSqlWinForm:
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
NlSqlWinForm personForm = new NlSqlWinForm(typeof(Person), this);
personForm.PreRenderControls();
personForm.RenderControls();
}
}
Запустим приложение и получим следующую форму, которая создана автоматически:
Теперь создадим объект класса Person, загрузим его из базы данных и заполним поля формы значениями из этого объекта:
Person ivan = new Person();
ivan.Id = 1;
ivan.LoadFromSql();
personForm.FillFromObject(ivan); // Заполняем поля формы из объекта ivan
Посмотрим, что получилось:
В библиотеке есть и обратная возможность: из заполненной формы можно записать значения в объект. Для этого нужно воспользоваться следующим методом:
personForm.FillObject(ivan); // Заполняем объект ivan значениями из формы
Точно такой же функционал доступен и для веб-приложений:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Person ivan = new Person();
ivan.Id = 1;
ivan.LoadFromSql();
NlSqlWebForm personWebForm = new NlSqlWebForm(typeof(Person), this);
personWebForm.PreRenderControls();
personWebForm.RenderControls();
personWebForm.FillFromObject(ivan);
}
}
Результат выполнения программы:
Отображение объектов в виде сводной таблицы
Зачастую требуется посмотреть объекты в виду общей таблицы. В библиотеке существует такая возможность, реализованная в класса NlSqlWinTable и NlSqlWebTable. Пример:
public MainForm()
{
InitializeComponent();
NlSqlWinTable personsTable = new NlSqlWinTable(this, typeof(City));
personsTable.Show();
}
В результате будет сгенерирована сводная таблица:
Аналогичным образом работает сводная таблица для веб-приложений:
protected void Page_Load(object sender, EventArgs e)
{
NlSqlWebTable personsTable = new NlSqlWebTable(typeof(Person), this);
personsTable.Show();
}
В результате выполнения получим таблицу:
У таблиц есть возможность задать фильтр выборки таким же образом, как и в методе GetList:
// Показывать только те записи, у которых id>4
personsTable.Where = new WhereElementary(WhereElementaryType.More, "id", 4);