2016-08-19 1 views
0

Cette méthode est appelée. Mais si je profile SQL Server, je peux voir que NHibernate n'essaie pas d'accéder au serveur.NHibernate n'appelant pas SQL Server

Aucune erreur n'a été renvoyée. C'est juste le criteria.List() renvoie simplement 0 lignes.

MyStuff est une classe

public class MyStuff { 
    public virtual int Id { get; set; } 
    public virtual int x { get; set; } 
    ... more attributes .... 
    public override int GetHashCode() { 
     return (GetType().FullName + "|" + Id.ToString()).GetHashCode(); 
    } 
} 

Et MyStuff est une application HBM:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="false" assembly="MyStuff" namespace="My.Stuff" default-lazy="false"> 
    <class name ="MyStuff" table="dbo.viewMyStuff" dynamic-update="false" lazy="false"> 
    <cache usage="read-only"/> 
    <id name="Id" column="Id" type="int"> 
     <generator class="native" /> 
    </id> 
    <property name="x" /> 
    .... other properties 
    </class> 
</hibernate-mapping> 

Les travaux suivants seulement:

select * from viewMyStuff 

NHibernate fait très bien avec d'autres classes/vues dans le même projet.

En fait, si je saisis intentionnellement la "table" dans le fichier HBM à "XviewXMyStuffX" NHibernate n'a aucun problème avec la faute de frappe. Pourquoi NHibernate ignore-t-il simplement la tentative attendue pour accéder à ma vue de base de données?

Répondre

0

Il s'avère que la vue traite l'attribut "x" comme une chaîne. Mais dans nHibernate, je le définis comme un Int64. Ces différences de type provoquent beaucoup l'échec des critères. Mais sans aucune erreur signalée?

0

Vérifiez bien que votre requête essaie réellement d'utiliser la classe exacte que vous souhaitez, et que le mappage s'applique également à la même classe. Méfiez-vous des classes ayant le même nom dans différents espaces de noms ou assemblages, par exemple. L'une des causes de ce type de problème est que si vous essayez d'interroger une classe qui n'est en fait pas mappée dans NHibernate, alors NHibernate renverra un résultat vide, et non une erreur.

Oh, et avez-vous essayé sans l'élément de cache pour exclure cela?