J'utilise NHibernate + Fluent pour gérer la base de données dans mon application. Jusqu'à présent, j'ai utilisé une SessionSource pour créer mes objets ISession. Je suis un peu confus à propos de ce qui vient de NHibernate ou de Fluent, et de ce que je devrais vraiment utiliser pour créer mes sessions.Courant; SessionSource ou SessionFactory pour la création de sessions?
ISession provient de NHibernate et de SessionSource de Fluent. Je crée le SessionSource à partir d'une FluentConfiguration et utilise actuellement le SessionSource pour créer des sessions. C'est ma fonction de créer des sessions. La FluentConfiguration et la SessionSource sont réutilisées:
if (_sessionSource == null)
{
_cfg = Fluently.Configure().Database(SQLiteConfiguration.Standard.ShowSql().UsingFile("test.db"));
_sessionSource = new SessionSource(_cfg.BuildConfiguration().Properties, new MappingsPersistenceModel());
var session = _sessionSource.CreateSession();
_sessionSource.BuildSchema(session);
return session;
}
return _sessionSource.CreateSession();
Est-ce que cela semble raisonnable? Cela semble plus intéressant d'utiliser une ISessionFactory pour créer des sessions, alors j'ai essayé d'en utiliser une. Cela vient de NHibernate, donc je ne sais pas si c'est la raison pour laquelle c'est un problème, mais cela échoue quand mes sessions sont créées à partir d'une ISessionFactory.
// Done once:
_sessionFactory = _cfg.BuildSessionFactory();
// Done each time a session is requested:
_sessionFactory.OpenSession()
L'utilisation de ce que j'obtenir un MappingException
lors de l'utilisation de la session, en disant "Non pour persister: MyProject.Model.SomeModelClass".
Dois-je continuer à utiliser SessionSource? Ou ai-je oublié quelque chose concernant ISessionFactory?
Pourriez-vous s'il vous plaît expliquer l'erreur que vous obtenez de la fabrique de session? –
Dans mes propres applications, j'utilise la méthode BuildConfiguration() et la passe à une fabrique de sessions. Si vous obtenez une erreur, le message peut nous donner plus d'informations pour résoudre votre problème. –
Ajout de l'exception à la description ci-dessus. Je dois courir - sera de retour un peu plus tard pour suivre .. – stiank81