Mysql
 sql >> Database >  >> RDS >> Mysql

Eccezione NHibernate.Mapping. Nessun persister per Namespace.className

Direi, perché tutte queste informazioni, dovremmo avere un colpevole. Ci sono così tanti problemi (beh problemi infatti) con la mappatura e codice C# , che sicuramente sappiamo:

Nel caso, che questo file com'è sarebbe disponibile per la sessione factory di NHibernate, otterremmo questa eccezione

Che potrebbe essere risolto aggiungendo l'attributo namespace alla mappatura namespace="NhibernateORM"

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
  assembly="NhibernateORM"
  namespace="NhibernateORM"
  auto-import="true">
  <class name="Layout" table="mytable">
    <id name="Id" column="ID" type="int" generator="assigned" />
    <property name="Name"        column="name"        type="String"/>
    <property name="xCoordinate" column="xCoordinate" type="double" />
    <property name="yCoordinate" column="yCoordinate" type="double" />
  </class>
</hibernate-mapping>

Una volta risolto il problema, otterremmo in seguito questa eccezione

che potrebbe essere risolto rendendo virtuale tutto il materiale dell'entità:

namespace NhibernateORM
{
    public class Layout
    {
        public virtual int Id { get; set; }
        public virtual string Name { get; set; }
        public virtual double xCoordinate { get; set; }
        public virtual double yCoordinate { get; set; }

Quindi, di sicuro, lo sappiamo:il problema è

  • configurazione errata in hibernate.cfg.xml
  • configurazione errata di Mapping.hbm.xml proprietà

Questo dovrebbe far parte di hibernate.cfg.xml :

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
      ...
      <mapping assembly="NhibernateORM"/>

il hibernate.cfg.xml deve avere proprietà:

  • Costruisci azione ===Contenuto
  • Copia nella directory di output ===Copia sempre

il Mapping.hbm.xml deve avere proprietà:

  • Costruisci azione ===Risorsa incorporata
  • Copia nella directory di output ===Non copiare