내 MVC C# 응용 프로그램에서 NInject MVC5를 사용하여 NHibernate를 구현했습니다. 모든 것이 잘 작동하지만 링크를 두 번 클릭하면 항상 오류가 발생합니다. { "먼저이 연결과 연결된 열려있는 DataReader가 있으며 먼저 닫아야합니다."}여러 요청에 대해 MySQL을 사용하여 NHibernate에서 세션을 멀티 스레드하는 방법은 무엇입니까?
또는
은 { "세션이 닫혀 \ 연구 \ 이름 nObject!. 'ISession'"}
지금 내가 메신저 ISession 내 IContentService 인터페이스를 결합하기 때문에이 알고있다. 나는 또한 ISession이 thread-safe가 아니며 한 번만 사용할 수 있다는 것을 알고있다. 그래서 내 질문은 ... 그럼 어떻게 여러 스레드에 걸쳐 동시 적으로 InRequestScope 사용할 수있는 세션을 만들 예정이다. 나는 사용자가 두 번 클릭하거나 다른 사용자가 같은 링크를 클릭하는 것과 동시에 여러 사용자를 중지시키는 오류를 클릭하는 링크를 클릭한다는 것을 알고 있기 때문에 실제로 이상적은 아닙니다.
내 주사이 있습니다
Bind<IContentService>().To<ContentService>().InRequestScope();
Bind<ISession>() //I'm sure the problem is right here, but not sure.
.ToMethod(
context =>
context.Kernel.Get<IMasterSessionSource>().GetSession())
.WhenInjectedInto<IContentService>()
.InRequestScope();
내 contentService의
public interface IContentService
{
IQueryable<Question> Questions{ get; }
}
public class ContentService : IContentService
{
private readonly ISession _session; //I think the problem might be here too...
public ContentService(ISession session)
{
_session = session;
}
public IQueryable<Question> Questions
{
get { return _session.Query<Question>(); }
}
}
UPDATE
난 내가 멀티 스레딩 ISessionFactory를 사용해야하지만 난 바인딩 할 수 없습니다 읽는 방법 내가 할 수있는 것처럼.
당신이 이미 [귀하의 사전 질문] (http://stackoverflow.com/questions/38596986/how-to-have에 들었다 :
UPDATE는
여기에 대한 답을 알아 냈어 nested-in-shared-session-in-nhibernate-containing-diff)를 사용하면 NHibernate 세션은 thread-safe하지 않다는 것을 알 수있다. 동일한 질문을 반복해서 묻는 것은 우주를 바꿀 것입니다. – MickyD
이것에 기초 : http://stackoverflow.com/questions/7359909/nhibernate-sessionfactory-thread-safe-issue "세션 팩토리가 threadsafe이고, 세션은 다음과 같습니다. 아니." 하지만 질문은 마지막 스레드 인 멀티 스레드 세션을 만드는 방법을 묻는 질문과 다릅니다 – NeoSketo
Golly, 그 링크는 어떻게 관련이 있습니까? 질문을 다르게하면 결과가 달라질 것이라고 생각하십니까? _ "[세션은 설계 상 NHibernate에서 쓰레드 안전하지 않다] (http://stackoverflow.com/a/242983/585968)"_. 그냥 받아 들여서 좋은 차 한잔을 만들어주세요. – MickyD