NHibernate Intro

Views:
 
     
 

Presentation Description

No description available.

Comments

Presentation Transcript

NHibernate что, где, когда:

NHibernate что, где, когда Артур Дробинский ЗетаСофт Томск, 2012

Способы работы с БД из .NET:

Способы работы с БД из .NET ADO.Net – DataSet / DataReader Linq2SQL ORM

Object-Relational Mapper:

Object-Relational Mapper public class BaseEntity { public virtual int Id { get ; set ; } } public class User : BaseEntity { public virtual string Login { get ; set ; } public virtual string FirstName { get ; set ; } public virtual string LastName { get ; set ; } } public class Topic : BaseEntity { public virtual string Title { get ; set ; } public virtual User Creator { get ; set ; } public virtual IList < Message > Messages { get ; set ; } } public class Message : BaseEntity { public virtual Topic Topic { get ; set ; } public virtual string Text { get ; set ; } public virtual DateTime DateTime { get ; set ; } public virtual User Author { get ; set ; } }

Object-Relational Mapper:

Object-Relational Mapper var connection = SessionConstructor .OpenConnection(); var command = connection.CreateCommand(); command.CommandText = @"SELECT TOP 5 * FROM [Message] INNER JOIN [User] Author ON Author.Id = [Message].Author_Id WHERE Author.Login='Shaddix' ORDER BY [Message].[DateTime] DESC" ; var reader = command.ExecuteReader(); var result = new List < object >(); while (reader.Read()) { result.Add( new { Text = reader[ "Text" ], Id = reader[ "Id" ] }); } var session = SessionConstructor .OpenSession(); var data = session.Query< Message >() .Where(x => x.Author.Login == "Shaddix" ) .OrderByDescending(x => x.DateTime) .Take(5) .ToList();

Плюсы ORM:

Плюсы ORM Работа с классами удобнее, чем с DataSet Проектирование на уровне классов Отсутствие «переключений контекста» Строгая типизация при работе с БД Удобные инструменты работы (профилирование, кэширование, миграции, etc) Использование знаний в LINQ вместо изучения SQL Ускорение разработки

Существующие ORM:

Существующие ORM Микро-ОРМ Dapper.NET Massive PetaPoco Полнофункциональные ORM NHibernate Entity Framework LLBLGen + маленькие + базовый ORM- функционал + простые, старый-добрый SQL + linq - запросы + БД-независимость + сложные сценарии маппинга (наследование/компоненты/связи) + кэширование/оптимизация запросов

Подходы при работе с ORM:

Подходы при работе с ORM Database-First Code-First

Маппинги в NHibernate :

Маппинги в NHibernate NHibernate и *. hbm.xml FluentNHibernate и отсутствие всех этих ужастиков (Convention over Configuration) Здесь мы смотрим примеры public class BaseEntity { public virtual int Id { get ; protected set ;} } public class User : BaseEntity { public virtual string Login { get ; set ; } public virtual string FirstName { get ; set ; } public virtual string LastName { get ; set ; } }

Вопросы?!:

Вопросы?! Артур Дробинский ЗетаСофт , Томск http://arturdr.ru artur.drobinskiy@gmail.com

Всем спасибо за внимание Успехов!:

Всем спасибо за внимание Успехов! Артур Дробинский ЗетаСофт , Томск http://arturdr.ru artur.drobinskiy@gmail.com

authorStream Live Help