Skip to content
This repository was archived by the owner on Jun 30, 2021. It is now read-only.

Simplify.FluentNHibernate

Alexanderius edited this page Dec 17, 2018 · 11 revisions

Simplify.FluentNHibernate Documentation

Provides:

  • FluentConfiguration class extensions which allows you to easy configure your data-base connection
  • NHibernate ISession extensions which allows you to write queries with lambda expressions
  • SchemaExporter

Available at NuGet as binary package

Quck Start Example

Session factory configuration and creation

namespace MyApp.Database
{
        public class MyDbFactoryManager
        {
                private readonly ISessionFactory _instance;

                public ISessionFactory Instance
                {
                        get { return _instance; }
                }

                public MyDbFactoryManager(string configSectionName = "MyDatabaseConnectionSettings")
                {
                        var configuration = Fluently.Configure();
                        configuration.InitializeFromConfigMsSql(configSectionName);
                        configuration.AddMappingsFromAssemblyOf<UserMap>();
                        _instance = configuration.BuildSessionFactory();
                }
        }
}

App.config or Web.config data-base configuration

<?xml version="1.0" encoding="utf-8"?>
<configuration>
        <configSections>
                <section name="MyDatabaseConnectionSettings" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        </configSections>

        <MyDatabaseConnectionSettings>
                <add key="ServerName" value="Server name" />
                <add key="DataBaseName" value="data-base name" />

                <add key="UserName" value="user name" />
                <add key="UserPassword" value="password" />
        </MyDatabaseConnectionSettings>
</configuration>

A port number can be specified via Port parameter:

<add key="Port" value="1234" />

Configuration with the Microsoft.Extensions.Configuration IConfiguration implementation with ability to specify settings section name

namespace MyApp.Database
{
        public class MyDbFactoryManager
        {
                private readonly ISessionFactory _instance;

                public ISessionFactory Instance
                {
                        get { return _instance; }
                }

                public MyDbFactoryManager(IConfiguration cfg, string configSectionName = "MyDatabaseConnectionSettings")
                {
                        var configuration = Fluently.Configure();
                        configuration.InitializeFromConfigMsSql(cfg, configSectionName);
                        configuration.AddMappingsFromAssemblyOf<UserMap>();
                        _instance = configuration.BuildSessionFactory();
                }
        }
}

IConfiguration settings based on appsettings.json example:

{
    "MyDatabaseConnectionSettings":
    {
        "ServerName": "Server name",
        "DataBaseName": "data-base name",
        "UserName": "user name",
        "UserPassword": "password",
    }
}

Additional NHibernate configuration can be specified, for example, a custom dialect

configuration.InitializeFromConfigMsSql(configSectionName, c => c.Dialect<MsSql2012Dialect>());

Session lambda extensions example

var user = session.GetObject(x => x.Name == "FooName");
var users = session.GetList(x => x.Name.StartWith("A"));

More examples here

Tracing SQL queries

Executed SQL queries can be displayed in console/(VS output window) by setting ShowSql option in settings:

<?xml version="1.0" encoding="utf-8"?>
        <MyDatabaseConnectionSettings>
                ...
                <!-- Default value is: false -->
                <add key="ShowSql" value="true" />
                ...
        </MyDatabaseConnectionSettings>
</configuration>

Clone this wiki locally