Może czasem się zdarzyć, że chcemy użyć NHibernate, jednak aplikacja korzysta z jakiegoś frameworka, który ma już swoją definicję połączenia z bazą danych. Po co więc w NHibernate ponownie konfigurować to samo połączenie, skoro można wykorzystać już istniejące?

Rozszerzamy klasę DriverConnectionProvider i w przeciążonej metodzie GetConnection zwracamy połączenie pobrane z jakiegoś zewnętrznego mechanizmu:

class MyDriverConnectionProvider
    : NHibernate.Connection.DriverConnectionProvider 
{
    public override IDbConnection GetConnection()
    {
        return MyExternalFramework.GetConnection();
    }
}

Wystarczy teraz odpowiednio skonfigurować NHibernate:

var configuration = Fluently.Configure()
    .Database(
        OracleClientConfiguration
        .Oracle10
        .Provider("My.Library.MyDriverConnectionProvider, My.Library")
        .ConnectionString(cs =>
            cs.Instance("my_instance"))
              .ProxyFactoryFactory(@"NHibernate.ByteCode.Castlei
                .ProxyFactoryFactory, NHibernate.ByteCode.Castle")
    )
    .Mappings(m => m.FluentMappings.AddFromAssemblyOf<MyClassMap>())
    .BuildConfiguration();

Niestety definicja ConnectionString jest niezbędna. Inaczej dostaniemy wyjątek z informacją, że nasza konfiguracja jest niekompletna i brakuje właśnie connection stringa.