1

J'ai un problème étrange avec Fluent Nhibernate sur C#. Ici, vous pouvez voir mon entité, ma carte et mon référentiel. Le problème est quand j'essaye d'obtenir une entité de la DB. si j'utilise seulement CODE_B ou CODE_C la requête échouera avec "Impossible de charger l'entité", mais si j'utilise CODE_A avant CODE_B ou CODE_C tout fonctionne correctement. Si je supprime:Nhibernate Courant sur C#, impossible d'exécuter la requête pour l'entité avec datetime

Map(x => x.MODI_DAT); 
Map(x => x.MODI_ORA); 

tout fonctionne bien.
J'ai essayé d'utiliser ces champs avec string, datetime et de forcer customSqlType "datetime" mais personne ne travaille. Je ne comprends pas pourquoi si j'obtiens toutes les entités de la table, la requête pour id fonctionne, mais si je ne demande pas avant toute la liste, j'obtiens une erreur.

L'autre chose étrange est que quand j'obtiens l'erreur, l'exception me montre la requête de l'objet. Si j'essaie manuellement la requête sur db je reçois correctement l'objet résultat.

Repository:

namespace WebApplication.Providers 
{ 
    public class TTW_SA_DETRepository 
    { 

     public TTW_SA_DET get() { 
      //var all = session.QueryOver<TTW_SA_DET>().List(); CODE_A 
      //var one = session.Get<TTW_SA_DET>(new TTW_SA_DET { 
CODI_SOC = "$$$", SAD_NOME_FORM = "ANAG_AZIONI", SAD_ORDE_COL = 0 }); CODE_B 
      var one = session.QueryOver<TTW_SA_DET>() 
       .Where(x => x.CODI_SOC == "$$$") 
       .And(x => x.SAD_NOME_FORM == "ANAG_AZIONI") 
       .And(x => x.SAD_ORDE_COL == 0) 
       .SingleOrDefault<TTW_SA_DET>(); // CODE_C 
      return one; 
     } 



     protected NHibernate.ISessionFactory sessionFactory; 
     protected NHibernate.ISession session; 


     protected NHibernate.ISession openSession() 
     { 
       sessionFactory =   
    MicrosoftSQLConfNhibernate.CreateSessionFactory(); 
       session = sessionFactory.OpenSession(); 

       return session; 
     } 

     public TTW_SA_DETRepository() 
     { 
      openSession(); 
     } 

    } 

dans mon principal (Startup.cs):

var rep = new TTW_SA_DETRepository(); 
rep.get(); 

Entité:

namespace WebApplication.Models 
{ 
    public class TTW_SA_DET 
    { 
     virtual public string CODI_SOC { get; set; } 
     virtual public string SAD_NOME_FORM { get; set; } 
     virtual public int SAD_ORDE_COL { get; set; } 
     virtual public DateTime MODI_DAT { get; set; } 
     virtual public DateTime MODI_ORA { get; set; } 

     public override bool Equals(object obj) 
     { 
      var val = obj as TTW_SA_DET; 
      return val != null && 
        CODI_SOC == val.CODI_SOC && 
        SAD_NOME_FORM == val.SAD_NOME_FORM && 
        SAD_ORDE_COL == val.SAD_ORDE_COL;     
     } 

     public override int GetHashCode() 
     { 
      var hashCode = 1411657508; 
      hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(CODI_SOC); 
      hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(SAD_NOME_FORM); 
      hashCode = hashCode * -1521134295 + EqualityComparer<int>.Default.GetHashCode(SAD_ORDE_COL); 
      return hashCode; 
     } 

    } 
} 

EntityMap:

namespace WebApplication.Models 
{ 
    public class TTW_SA_DETMap : ClassMap<TTW_SA_DET> 
    { 
     public TTW_SA_DETMap() 
     { 
      Table("TTW_SA_DET"); 
      CompositeId() 
       .KeyProperty(x => x.CODI_SOC) 
       .KeyProperty(x => x.SAD_NOME_FORM) 
       .KeyProperty(x => x.SAD_ORDE_COL); 
      Map(x => x.MODI_DAT);//.CustomSqlType("datetime"); 
      Map(x => x.MODI_ORA);//.CustomSqlType("datetime"); 
     } 

    } 
} 

config DB:

namespace WebApplication 
{ 
    public class MicrosoftSQLConfNhibernate 
    { 


     public static ISessionFactory CreateSessionFactory() 
     { 
      return Fluently.Configure() 
     .Database(MsSqlConfiguration.MsSql2012.ConnectionString(c => c 
       .Server("myCORRECTdata") 
       .Database("myCORRECTdata") 
       .Username("myCORRECTdata") 
       .Password("myCORRECTdata") 
       ).ShowSql() 
      ) 
       .Mappings(m => 
       m.FluentMappings.AddFromAssemblyOf<Startup>()) 
       .BuildSessionFactory(); 
     } 

    } 
} 

Enfin voici le tableau MSSQL 2014:

CREATE TABLE EDILWEB_MONET.dbo.TTW_SA_DET (
    CODI_SOC varchar(3) NOT NULL, 
    SAD_NOME_FORM varchar(50) NOT NULL, 
    SAD_ORDE_COL int NOT NULL, 
    MODI_DAT datetime, 
    MODI_ORA datetime, 
    CONSTRAINT PK_SY_SA_DET PRIMARY KEY (CODI_SOC,SAD_NOME_FORM,SAD_ORDE_COL) 
) go 

Répondre

0

Probablement est un problème de réseau, avec une autre passerelle le code fonctionne. Peut-être que le problème est un pare-feu quelque part ou une mauvaise configuration MTU.