我遇到以下异常:
“Timeout Expired。在从池中获取连接之前已经过了超时时间。这可能是因为所有池化的连接都在使用中并且达到了最大池大小。”
...来自我使用StructureMap和Fluent NHibernate开发的相对繁重的ASP.NET MVC 2站点。
我认为也许连接没有得到妥善处理。您认为这可能导致什么?可能是我使用InstanceScope.Hybrid吗?
这是我的NHibernateRegistry类;在此先感谢您的帮助:
using MyProject.Core.Persistence.Impl;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using NHibernate;
using NHibernate.ByteCode.LinFu;
using NHibernate.Cfg;
using MyProject.Core.FluentMapping;
using StructureMap.Attributes;
using StructureMap.Configuration.DSL;
namespace MyProject.Core.Persistence
{
public class NHibernateRegistry : Registry
{
public NHibernateRegistry()
{
FluentConfiguration cfg = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2005.ConnectionString(
x =>
x.FromConnectionStringWithKey(
"MyConnectionString"))
.ProxyFactoryFactory(typeof (ProxyFactoryFactory).AssemblyQualifiedName))
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<EntryMap>());
Configuration configuration = cfg.BuildConfiguration();
ISessionFactory sessionFactory = cfg.BuildSessionFactory();
ForRequestedType<Configuration>().AsSingletons()
.TheDefault.IsThis(configuration);
ForRequestedType<ISessionFactory>().AsSingletons()
.TheDefault.IsThis(sessionFactory);
ForRequestedType<ISession>().CacheBy(InstanceScope.Hybrid)
.TheDefault.Is.ConstructedBy(ctx => ctx.GetInstance<ISessionFactory>().OpenSession());
ForRequestedType<IUnitOfWork>().CacheBy(InstanceScope.Hybrid)
.TheDefaultIsConcreteType<UnitOfWork>();
ForRequestedType<IDatabaseBuilder>().TheDefaultIsConcreteType<DatabaseBuilder>();
}
}
}