2017-06-07 2 views
0

De temps en temps, mon application Web commence à générer les erreurs suivantes.NHibernate et MySql Colonne manquante Exception

En utilisant NHibernate 4.0.0.4000 et MySql.Data 6.8.3

Stack Trace
ERROR [(null)] - Message:could not execute query

NHibernate log
NHibernate.Util.ADOExceptionReporter WARN - System.IndexOutOfRangeException: Could not find specified column in results:

Une fois une fois de ces erreurs se produisent, il commence à se produire fréquemment jusqu'à ce que l'application Web est redémarrée.

Il est étrange que cela n'arrive qu'à certains utilisateurs et pas à tous. J'ai également remarqué dans ce message de journal particulier que les valeurs de p4 et p5 devraient être permutées.

Est-ce un problème avec le cache de requête?

Quelqu'un a-t-il un aperçu de la raison pour laquelle cela se produit?

Si elle aide ici est la requête noueux (mais je vois cette erreur sur les requêtes beaucoup plus simples ainsi)

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

Pouvez-vous s'il vous plaît fournir l'extrait de code? Alors seulement nous pouvons vous aider. – Naruto

Répondre

0

Ok obtenu le problème. C'est parce qu'une partie de l'argument que vous passez dans votre déclaration préparée est nulle, c'est pourquoi cette erreur. J'ai eu le même problème plus tôt et je l'ai résolu en vérifiant seulement s'il n'est pas nul l'ajouter dans le filtrage de requête.

Il existe également une autre possibilité de verrouillage de ligne par toute autre requête. Utilisez-vous le verrouillage dans la requête mysql? problème

2 semble voir la solution indiquée ci-dessous

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

+0

Rien n'est nul dans la requête. J'envoie plusieurs constantes et en fonction de la requête journalisée, une valeur dynamique est attachée en tant que paramètre. – cangerer