Fluent NHibernate предоставляет альтернативу стандартным XML-файлам конфигурации меппинга NHibernate. Вместо написания XML документов (.hbm.xml), Fluent NHibernate позволяет вам писать меппинг в строго типизированной форме, на языке C#. Это обеспечивает легкость рефакторинга, улучшает читабельность и локаничность кода.
Простой пример
Обычная конфигурация NHibernate:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="QuickStart" assembly="QuickStart">
<class name="Cat" table="Cat">
<id name="Id">
<generator class="identity" />
</id>
<property name="Name">
<column name="Name" length="16" not-null="true" />
</property>
<property name="Sex" />
<many-to-one name="Mate" />
<bag name="Kittens">
<key column="mother_id" />
<one-to-many class="Cat" />
</bag>
</class>
</hibernate-mapping>
Конфигурация с использованием Fluent NHibernate:
public class CatMap : ClassMap<Cat>
{
public CatMap()
{
Id(x => x.Id);
Map(x => x.Name)
.Length(16)
.Not.Nullable();
Map(x => x.Sex);
References(x => x.Mate);
HasMany(x => x.Kittens);
}
}
Как видно из примера, правила меппинга описываются в конструкторе класса-наследника ClassMap<>
. Для определения конкретных правил используются методы Id
, Map
, References
и тп, а также методы-расширения, позволяющие писать fluent-конструкции. Чтобы меппинг вступил в силу нужно соответствующим образом настроить SessionFactory
:
private static ISessionFactory CreateSessionFactory()
{
return Fluently.Configure()
.Database(
SQLiteConfiguration.Standard
.UsingFile("firstProject.db")
) 1
.Mappings(m => 2
m.FluentMappings.AddFromAssemblyOf<Program>())
.BuildSessionFactory();
}
Fluent NHibernate позволяет задавать настройки источника данных 1 и указать классы меппинга 2.