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);