2010-11-11 5 views
0

Je suis en train d'obtenir une liste de tous les films de ma db comme PostgreSQL ceci:PostgreSQL avec NHibernate (.net, pgsql) Erreur requête

IQuery query = session.CreateQuery("FROM Movie"); 

mais obtenir cette erreur: ERREUR: 42P01: relation des films » "n'existe pas

Voici une requête que j'utilise dans pgAdminIII qui fonctionne

SELECT 
    "Movies"."Id", 
    "Movies"."Title", 
    "Movies"."Director", 
    "Movies"."ReleaseDate" 
FROM 
    public."Movies"; 

Il semble que la requête est pas correct, qui est en cours de construction à partir NHibernate. Voici la configuration de web.config.

<configSections> 
    <section name="hibernate-configuration" requirePermission="false" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" /> 
</configSections> 
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory name="NHibernate.Test"> 
     <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property> 
     <property name="connection.driver_class">NHibernate.Driver.NpgsqlDriver</property> 
     <property name="connection.connection_string">Server=localhost;database=Movies;User ID=movie;Password=password;</property> 
     <property name="dialect">NHibernate.Dialect.PostgreSQLDialect</property> 
     <property name='proxyfactory.factory_class'>NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property> 
    </session-factory> 
</hibernate-configuration> 

Des idées?

Répondre

2

Jetez un oeil à l'erreur:

ERROR: 42P01: relation "movies" does not exist

C'est des films minuscules, pas les films de majuscules entre guillemets doubles que vous utilisez dans votre morceau de SQL (!). PostgreSQL utilise des minuscules ou vous devez utiliser des guillemets doubles.

Conseil: utilisez toujours des minuscules pour les noms d'objet dans votre base de données.

+0

Enclose les noms d'objets en arrière-guillemets ('') si vous devez conserver les noms de cas mixtes. –

+3

Backtics? C'est MySQL-stuff et ne fonctionne pas dans une autre base de données. Utilisez les guillemets doubles ANSI-SQL si vous le souhaitez, tout comme l'exemple ci-dessus. –

Questions connexes