aşağıdaki mimarisine dayanan bir MVC web uygulaması varAsp.Net MVC UNitOfWork ve MySQL ve Uyku Bağlantıları
iş modelinin bir birim kullanır Asp.Net MVC2, Ninject, Akıcı NHibernate, MySQL.
Her bağlantı MySQL, SHOW PROCESSLIST sorgu sonuçlarında bir girdi olarak görülebilen bir uyku bağlantısı oluşturur.
Sonuç olarak, bu uygulama havuz sınırını aşmak ve web uygulamasını kilitlemek için yeterli bağlantılar oluşturacaktır.
Bağlantıların doğru şekilde atılmadığından şüpheleniyorum.
Bu nerede ve nasıl gerçekleşmeli?
public class UnitOfWork : IUnitOfWork
{
private readonly ISessionFactory _sessionFactory;
private readonly ITransaction _transaction;
public ISession Session { get; private set; }
public UnitOfWork(ISessionFactory sessionFactory)
{
_sessionFactory = sessionFactory;
Session = _sessionFactory.OpenSession();
Session.FlushMode = FlushMode.Auto;
_transaction = Session.BeginTransaction(IsolationLevel.ReadCommitted);
}
public void Dispose()
{
if (Session != null)
{
if (Session.IsOpen)
{
Session.Close();
Session = null;
}
}
}
public void Commit()
{
if (!_transaction.IsActive)
{
throw new InvalidOperationException("No active transation");
}
_transaction.Commit();
Dispose();
}
public void Rollback()
{
if (_transaction.IsActive)
{
_transaction.Rollback();
}
}
}
public interface IUnitOfWork : IDisposable
{
void Commit();
void Rollback();
}
public class DataService
{
int WebsiteId = Convert.ToInt32(ConfigurationManager.AppSettings["Id"]);
private readonly IKeyedRepository<int, Page> pageRepository;
private readonly IUnitOfWork unitOfWork;
public PageService Pages { get; private set; }
public DataService(IKeyedRepository<int, Page> pageRepository,
IUnitOfWork unitOfWork)
{
this.pageRepository = pageRepository;
this.unitOfWork = unitOfWork;
Pages = new PageService(pageRepository);
}
public void Commit()
{
unitOfWork.Commit();
}
}
public class PageService
{
private readonly IKeyedRepository<int, Page> _pageRepository;
private readonly PageValidator _pageValidation;
public PageService(IKeyedRepository<int, Page> pageRepository)
{
_pageRepository = pageRepository;
_pageValidation = new PageValidator(pageRepository);
}
public IList<Page> All()
{
return _pageRepository.All().ToList();
}
public Page FindBy(int id)
{
return _pageRepository.FindBy(id);
}
}
mükemmel blog.bobcravens.com Bob Cravens ile temas halinde kim kendim ve ben şimdi EndRequest + = temsilci { IUnitOfWork UOW = Kernel.Get() kullanıyorum; uow.Dispose(); }; –