Marcin Wolański
"It is not the critic who counts: not the man who points out how the strong man stumbles or where the doer of deeds could have done better. The credit belongs to the man who is actually in the arena [...]"

Własne połączenie w NHibernate

czwartek, 26 listopada 2009 roku

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.

z tagami .NET and NHibernate

blog comments powered by Disqus