私は、MVC C#アプリケーションでNInject MVC5を使用してNHibernateを実装しました。すべて正常に機能しますが、私は自分のリンクをダブルクリックすると常にエラーが発生することに気付きました: {"最初に閉じる必要のあるこのConnectionに関連付けられているこのDataReaderはすでに開かれています"} または複数のリクエストに対してMySQLを使用してNHibernateでセッションをマルチスレッドする方法は?
は{ "セッションが閉じられ、\ rを\ nObject名前:! 'ISession'"}
今私はイムはISessionに私のIContentServiceインターフェースを結合するので、これは知っています。私はまた、ISessionはスレッドセーフではなく、一度しか使用できないことも知っています。だから私の質問は...私はどのように複数のスレッドにまたがって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を使用する必要がありますが、私はそれをバインドすることができませんでしたどのように読んで私はISessionできるように。
あなたは既に[あなたの前の質問](http://stackoverflow.com/questions/38596986/how-to-haveに言われた:
UPDATEは
は、ここに答えを考え出しましたセッションのスレッドセーフではない(ここで知っていたことを認めています)。何度も同じ質問をすることはユニバースを変更するつもりはない – MickyD
これに基づいて:http://stackoverflow.com/questions/7359909/nhibernate-sessionfactory-thread-safe-issue "セッションファクトリはスレッドセーフで、セッションはそうではありません。しかし、質問は、マルチスレッドセッションを作成する方法を尋ねる最後のものとは異なります – NeoSketo
Golly、そのリンクはどのように関係していますか?あなたはその質問を別の方法で尋ねると結果が異なると思いますか? _ "[セッションはNHibernateのスレッドセーフではありません](http://stackoverflow.com/a/242983/585968)" _。ただそれを受け入れ、お茶の良いカップを作る – MickyD