Domanda

Sto cercando di far funzionare NHibernate. Ho questa classe:

mm.k.Domain.Kampagne

(lo spazio dei nomi / assembly è mm.k.Domain)

In un altro progetto di Visual Studio (Assembly mm.k. Infrastruttura) ho ottenuto i miei file Mapping (in una directory Mappings), il mio hibernate.cfg.xml e alcuni repository.

Ecco il mio file di mappatura:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="mm.k.Domain"
                   namespace="mm.k.Domain">

  <class name="Kampagne" table="Kampagner">
    <id name="Id">
      <generator class="identity" />
    </id>
    <property name="Navn" not-null="true" />
    <property name="Logo" />
  </class>

</hibernate-mapping>

Quando sto configurando la mia sessione, faccio questo:

_configuration.AddAssembly(typeof(mm.k.Domain.Kampagne).Assembly);

E questo è ciò che non funziona! Quando si chiama:

var test = session.Get<Kampagne>(kampagneId);

Ottengo il seguente errore: " Nessuna persister per: mm.k.Domain.Kampagne " Come se non registrasse il fild di mapping incorporato. Nota che l'azione di compilazione sul file di mapping è impostata su Embedded Resource.

Se cambio la riga sopra in:

_configuration.AddFile(@"fullpath\mm.k.Infrastructure\Mappings\Kampagne.hbm.xml");

Tutto funziona perfettamente!

Qualche idea? Grazie in anticipo.

È stato utile?

Soluzione

Non sono sicuro di come sia il tuo file nhibernate.cfg.xml, ma generalmente ho un oggetto come questo

<mapping assembly="mm.K.Infrastructure"/>

in base alle informazioni che hai fornito. NHibernate lo utilizza per caricare i file di mapping da questo assembly specifico.

Questo dovrebbe darti la mappatura di cui hai bisogno.

Altri suggerimenti

Nel caso qualcuno abbia questo problema con Hibernate.NET come ho fatto io. Assicurati di aver selezionato nella finestra Proprietà il tuo file Crea azione come " Risorsa integrata " .

Stavo ricevendo il problema. Ma all'improvviso ho osservato che il file di mappatura non era incorporato. Vai al file .hbm.xml. Fai clic su Proprietà. Quindi avanzato - > Seleziona " Risorse integrate "

Ogni volta che usi il file hbm.xml imposti la tua classe di configurazione in questo modo:

Configuration cfg = new Configuration();
cfg.Configure();
// Add class mappings to configuration object
cfg.AddAssembly(Assembly.GetCallingAssembly());
ISessionFactory sessionFactory = cfg.BuildSessionFactory();

Ogni volta che usi Nhibernate.Mapping.Attributi come classe dovrai usare: Ad esempio, hai utilizzato Mapping.attributes in Product Class

Configuration cfg = new Configuration();
cfg.Configure();
// Add class mappings attributes to configuration object
cfg.AddInputStream(HbmSerializer.Default.Serialize(typeof(Model.Product);
ISessionFactory sessionFactory = cfg.BuildSessionFactory();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top