Дмитрий Петухов ЦКЗ Аргус
Технологии доступа к данным Популярные ORM ы NHibernate Демо
private void Page_Load(object sender, EventArgs e) { … string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+ "c:\\Data\\Northwind.mdb;User Id=admin;Password=;"; string queryString = "SELECT ProductID, UnitPrice, ProductName from products " + "WHERE UnitPrice > ? ORDER BY UnitPrice DESC;"; using (OleDbConnection connection = new OleDbConnection(connectionString)){ OleDbCommand command = new OleDbCommand(queryString, connection); paramValue); try { connection.Open(); OleDbDataReader reader = command.ExecuteReader(); while (reader.Read()) { … } reader.Close(); } catch (Exception ex){} } … }
ЛогикаПредставлениеДоступ к данным База данных
Объектно - ориентированные СУБД ADO.NET Object-Relational Mapper (ORM)
Объектная модель данных Медленные
Объектная модель vs Реляционная модель Парадигмы ООП Связи объектов : Коллекции vs Первичных ключ, внешний ключ Запросы : несколько запросов или сложный запрос c JOIN Многие - ко - многим : ссылки между объектами vs « третья таблица »
Проблема : Очень много однообразного кода Решения : Самописные библиотеки Автогенерилки ( например, CodeSmith)
Это модно Скрывает « семантический провал »
LinqToSql 45% NHibernate37% Entity Framework34% Castle ActiveRecord 10% LLBLGen Pro ($$$)5%
OpenSource Большой опыт Hibernate Все основные СУБД Логика не зависит от ORM Всякие плюшки
Запросы с помощью : SQL Hibernate Query Language Hibernate Criteria Language LinqToHNibernate
Слой данных Технологии доступа к данным Популярные ORM ы NHibernate Демо
Дмитрий Петухов
Сам Nhibernate Nhibernate.Linq ( там же ) Основной мануал ate/html/ ate/html/ Профилировщик nhprof.com/nhprof.com/ ormbattle.net/