2017-06-07 18 views
0

時々、私のWebアプリケーションが次のエラーをスローし始めます。 NHibernateは4.0.0.4000を使用してNHibernateとMySqlが見つからない列例外

とMySql.Data 6.8.3

スタックトレース
ERROR [(null)] - Message:could not execute query

NHibernateはかつて一度、これらのエラーの
NHibernate.Util.ADOExceptionReporter WARN - System.IndexOutOfRangeException: Could not find specified column in results:

をログに記録し、それがされるまで頻繁に発生し始め発生Webアプリケーションが再起動します。

すべてのユーザーではなく、一部のユーザーにのみ発生することは奇妙です。また、この特定のログメッセージで、p4とp5の値を入れ替えてください。

これはクエリキャッシュの問題ですか?

これはなぜ起こっているのかについての洞察はありますか?それはここに役立ちます危ないクエリです(しかし、私もはるかに単純なクエリにこのエラーが表示された場合)

FunderInfoViewModel funderDto = null; 
Funder funderAlias = null; 
Contact contactAlias = null; 

var totalOpportunitiesAwardedCount = QueryOver.Of<Opportunity>() 
       .Where(o => o.Funder.Id == funderAlias.Id) 
       .And(o => o.Status == OpportunityStatus.Awarded || o.Status == OpportunityStatus.AwardedClosed) 
       .SelectList(list => list 
        .SelectCount(o => o.Id)); 

      var totalOpportunitiesAwardedSum = QueryOver.Of<Opportunity>() 
       .Where(o => o.Funder.Id == funderAlias.Id) 
       .And(o => o.Status == OpportunityStatus.Awarded || o.Status == OpportunityStatus.AwardedClosed) 
       .SelectList(list => list 
        .SelectSum(o => o.AmountAwarded)); 

      var totalOpportunitiesCount = QueryOver.Of<Opportunity>() 
       .Where(o => o.Funder.Id == funderAlias.Id) 
       .SelectList(list => list 
        .SelectCount(o => o.Id)); 

      IEnumerable<FunderInfoViewModel> funders = _session.QueryOver(() => funderAlias) 
       .Left.JoinAlias(f => f.Contacts,() => contactAlias, x => x.IsDefault) 
       .Where(o => o.Organization.Id == organizationId) 
       .SelectList(list => list 
        .Select(x => x.Id) 
        .WithAlias(() => funderDto.Id) 
        .Select(x => x.Name) 
        .WithAlias(() => funderDto.Name) 
        .Select(x => x.Description) 
        .WithAlias(() => funderDto.Description) 
        .Select(x => x.AreasOfInterest) 
        .WithAlias(() => funderDto.AreasOfInterest) 
        .Select(x => x.Type) 
        .WithAlias(() => funderDto.FunderType) 
        .Select(x => x.TaxId) 
        .WithAlias(() => funderDto.TaxId) 
        .Select(x => x.PhoneNumber) 
        .WithAlias(() => funderDto.PhoneNumber) 
        .Select(x => x.FaxNumber) 
        .WithAlias(() => funderDto.FaxNumber) 
        .Select(x => x.EmailAddress) 
        .WithAlias(() => funderDto.EmailAddress) 
        .Select(x => x.Website) 
        .WithAlias(() => funderDto.Website) 
        .Select(x => x.CustomLink) 
        .WithAlias(() => funderDto.CustomLink) 
        .Select(x => x.MinimumFundingRange) 
        .WithAlias(() => funderDto.MinimumFundingRange) 
        .Select(x => x.MaximumFundingRange) 
        .WithAlias(() => funderDto.MaximumFundingRange) 
        .Select(() => contactAlias.FirstName) 
        .WithAlias(() => funderDto.PrimaryContactFirstName) 
        .Select(() => contactAlias.LastName) 
        .WithAlias(() => funderDto.PrimaryContactLastName) 
        .Select(() => contactAlias.Title) 
        .WithAlias(() => funderDto.PrimaryContactTitle) 
        .SelectSubQuery(totalOpportunitiesAwardedCount) 
        .WithAlias(() => funderDto.AwardedOpportunitiesCount) 
        .SelectSubQuery(totalOpportunitiesAwardedSum) 
        .WithAlias(() => funderDto.AwardedOpportunitiesValue) 
        .SelectSubQuery(totalOpportunitiesCount) 
        .WithAlias(() => funderDto.OpportunitiesCount) 
       ) 
       .OrderBy(f => f.Name) 
       .Asc 
       .TransformUsing(Transformers.AliasToBean<FunderInfoViewModel>()) 
       .List<FunderInfoViewModel>(); 

+0

下記のソリューションを使用すると、コードスニペットを提供してくださいすることができご覧のように思えますか?それから、私たちだけがあなたを助けることができます。 – Naruto

答えて

0

OK]をクリックして問題を得ました。なぜなら、あなたが用意したステートメントで渡している引数のいくつかがnullなので、なぜこのエラーです。私は以前同様の問題を抱えていましたが、それがヌルでないかどうかだけチェックすることで解決しました。

また、他のクエリによって行ロックが発生する可能性もあります。 mysqlクエリでロックを使用していますか?

第二の問題は、

https://forums.asp.net/t/1230295.aspx?IDataReader+Could+not+find+specified+column+in+results+

+0

クエリには何もnullがありません。いくつかの定数を送信し、ログに記録されたクエリに基づいて、1つの動的値がパラメータとして付加されます。 – cangerer

関連する問題