0

SOでこの質問を見つけることができ、多くの回答がありますが、私はそれらの回答をたくさん試しましたが、うまくいきませんでした。

Ninjectと一緒にNHibernateを使用しています。このエラーが発生するのは、1つの投稿アクションの後でのみで、他のすべてのアクションは正常に機能します。

これが、設定テーブルの行とnHibernate構成を変更するためのコードです。

NHibernate / Ninject構成:1)

class ArtexNinjectModule: NinjectModule
{
    /// <summary>
    /// For dependency injection with Ninject
    /// </summary>
    public override void Load()
    {


        this.Bind<IRepository<Guide>>().To<GuideRepository>();
        this.Bind<IRepository<GuideReservation>>().To<GuideReservationRepository>();
        this.Bind<IRepository<Alert>>().To<AlertRepository>();
        this.Bind<IRepository<ReceiveAlert>>().To<ReceiveAlertRepository>();
        this.Bind<IRepository<TourType>>().To<TourTypeRepository>();
        this.Bind<IRepository<Role>>().To<RoleRepository>();
        this.Bind<IRepository<Language>>().To<LanguageRepository>();
        this.Bind<IRepository<GuideLanguage>>().To<GuideLanguageRepository>();
        this.Bind<IRepository<Member>>().To<MemberRepository>();
        this.Bind<IRepository<Reservation>>().To<ReservationRepository>();
        this.Bind<IRepository<Groep>>().To<GroepRepository>();
        this.Bind<IRepository<Individual>>().To<IndividualRepository>();
        this.Bind<IRepository<Address>>().To<AddressRepository>();
        this.Bind<IRepository<BlockedDate>>().To<BlockedDateRepository>();
        this.Bind<IRepository<Setting>>().To<SettingRepository>();
        this.Bind<ISessionFactory>().ToMethod(x => NHibernateHelper.SessionFactory).InSingletonScope();
        this.Bind<ISession>().ToMethod(x => NHibernateHelper.SessionFactory.OpenSession()).InRequestScope();

    }

}

2)

public static class NHibernateHelper
{
    private static ISessionFactory _sessionFactory;

    public static ISessionFactory SessionFactory
    {
        get { return _sessionFactory ?? (_sessionFactory = CreateSessionFactory()); }
    }

    private static ISessionFactory CreateSessionFactory()
    {

        return new Configuration()
            .Configure()
            .AddAssembly(typeof(NHibernateHelper).Assembly)
            .BuildSessionFactory();
    }
}

3)

public class NHHttpModule : IHttpModule 
{

    protected readonly ILog Logger = LogManager.GetLogger("Application");
    public void Init(HttpApplication context)
    {


        context.EndRequest += ApplicationEndRequest; context.BeginRequest += ApplicationBeginRequest; 
    }      
    public void ApplicationBeginRequest(object sender, EventArgs e) 
    {

        if (!CurrentSessionContext.HasBind(NHibernateHelper.SessionFactory))
        {
            CurrentSessionContext.Bind(NHibernateHelper.SessionFactory.OpenSession());
            Logger.Debug("BEGIN REQUEST");
        }
    }      
    public void ApplicationEndRequest(object sender, EventArgs e) 
    {
        Logger.Debug("END REQUEST");
        ISession currentSession = CurrentSessionContext.Unbind(NHibernateHelper.SessionFactory);
        if (currentSession != null)
        {
            currentSession.Close();
            currentSession.Dispose();
        }
    }
    public void Dispose()
    {  

    }
}

これはアクションです:

        [TransactionFilter]
        [HttpPost]
        public void Options(string maxPersonsHeadquarters, string maxPersonsTextile, string maxPerGroupHeadquarters, string maxPerGroupTextile, string deleteWithGuide, string deleteWithConfirmedGuide, string deleteWithConfirmedGroupIndi)
        {
            Setting oldSetting = _settingRepo.GetList().ToList().ElementAt(0);
            try
            {
                oldSetting.MaxPersonsHeadquarters = int.Parse(maxPersonsHeadquarters);
                oldSetting.MaxPersonsPerGroupHeadquarters = int.Parse(maxPerGroupHeadquarters);
                oldSetting.MaxPersonsTextile = int.Parse(maxPersonsTextile);
                oldSetting.MaxPersonsPerGroupTextile = int.Parse(maxPerGroupTextile);

                oldSetting.DeleteWithConfirmedGroup = bool.Parse(deleteWithConfirmedGroupIndi);
                oldSetting.DeleteWithConfirmedGuide = bool.Parse(deleteWithConfirmedGuide);
                oldSetting.DeleteWithGuide = bool.Parse(deleteWithGuide);

                _settingRepo.Edit(oldSetting);
            }
            catch (Exception e) {
                logger.Error("SettingController/Option: " + e.Message );    
            }



        }

私の問題を解決するのに十分な情報があればいいのですが。さらに情報が必要な場合はお知らせください。前もって感謝します。

4

1 に答える 1

0

私はこれに対する答えを見つけました。jQueryの問題だったので、答えがわかりませんでした。

ボタンがクリックされたとき、これは私のjQuery関数に行きました。そして、この関数は私のコントローラーに投稿しました。

しかし、ボタンの入力タイプは「送信」だったので、コントローラーに2つの投稿がありました。

2つの投稿、1つのセッション==>「現在のコンテキストにバインドされたセッションがありません」-エラー!

よろしくお願いします。

于 2012-07-17T13:26:53.970 に答える