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

advertisement
NHibernate
что, где, когда
Артур Дробинский
ЗетаСофт
Томск, 2012
Способы работы с БД из .NET
•
ADO.Net – DataSet/DataReader
•
Linq2SQL
•
ORM
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;
}
}
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
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
•
•
•
•
•
•
•
Работа с классами удобнее, чем с DataSet
Проектирование на уровне классов
Отсутствие «переключений контекста»
Строгая типизация при работе с БД
Удобные инструменты работы
(профилирование, кэширование, миграции,
etc)
Использование знаний в LINQ вместо изучения
SQL
Ускорение разработки
Существующие ORM
•
Микро-ОРМ
•
•
•
•
Dapper.NET
Massive
PetaPoco
+ маленькие
+ базовый ORM-функционал
+ простые, старый-добрый SQL
Полнофункциональные ORM
•
•
•
NHibernate
Entity Framework
LLBLGen
+ linq-запросы
+ БД-независимость
+ сложные сценарии маппинга
(наследование/компоненты/связи)
+ кэширование/оптимизация запросов
Подходы при работе с ORM
•
Database-First
•
Code-First
Маппинги в NHibernate
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; }
}
•
•
•
NHibernate и *.hbm.xml
FluentNHibernate и отсутствие всех этих
ужастиков (Convention over Configuration)
Здесь мы смотрим примеры
Вопросы?!
Артур Дробинский
ЗетаСофт, Томск
http://arturdr.ru
artur.drobinskiy@gmail.com
Всем спасибо за внимание
Успехов!
Артур Дробинский
ЗетаСофт, Томск
http://arturdr.ru
artur.drobinskiy@gmail.com
Download