Tommy Jakobsen
Tommy Jakobsen

Reputation: 2361

NHibernate MappingException. No Persister

I'm trying to get NHibernate to work. I've got this class:

mm.k.Domain.Kampagne

(namespace/assembly is mm.k.Domain)

In another Visual Studio project (Assembly mm.k.Infrastructure) I got my Mapping files (in a Mappings directory), my hibernate.cfg.xml and some repositories.

Heres my mapping file:

<?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>

When I'm configuring my session, I do this:

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

And thats what doesn't work! When calling:

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

I get the following error: "No persister for: mm.k.Domain.Kampagne" Like it doesn't register the embedded mapping fild. Note that I have the build action on the mapping file set to Embedded Resource.

If I change the above line to:

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

Everything works perfectly fine!

Any ideas? Thanks in advance.

Upvotes: 1

Views: 8778

Answers (4)

Sayeed S. Alam
Sayeed S. Alam

Reputation: 463

I was Getting the problem. But suddenly observed that the mapping file was not embedded. Goto the .hbm.xml file. Click properties. Then advanced -> Select "Embedded Resource"

Upvotes: 2

Whenever you use hbm.xml file you will set your configuration class like this:

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

Whenever you use Nhibernate.Mapping.Attributes like classe you will have to use: For example you have use 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();

Upvotes: 1

Eugeniu Torica
Eugeniu Torica

Reputation: 7574

In case someone will have this issue with Hibernate.NET as I did. Make sure you selected in Properties Window for your file Build Action as "Embedded Resource".

Upvotes: 7

LizB
LizB

Reputation: 2213

Not sure what your nhibernate.cfg.xml file looks like, but I generally have an item like this

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

based on your information you've given. NHibernate uses this to load the mapping files from this specific assembly.

This should give you the mapping you need.

Upvotes: 3

Related Questions