Home > .net 2.0, .net 3.0, .net 3.5, c#, LINQ, Microsoft, Oracle, SQL, Visual Studio 2008 > Fluent NHibernate With Oracle – A Question…

Fluent NHibernate With Oracle – A Question…

December 2, 2008

Answer found!  Read more here.

After success with standard NHibernate, I quickly became enraptured with the cleaner Fluent NHibernate API.  No more XML; however, I have had VERY limited (read: none) success getting this working against Oracle—especially against our crazy Oracle environment (of which I have no control and readonly access).

Here’s what I have:

A basic ClassMap of a Student object.

class StudentMap : ClassMap<Student>


       public StudentMap()




              Id(x => x.Id, “pupil_number”)


              Map(x => x.FirstName, “first_name”);

              Map(x => x.LastName, “surname”);




A basic Student object.

public class Student


       private Student() { }


       public virtual int Id { get; set; }

       public virtual string FirstName { get; set; }

       public virtual string LastName { get; set; }


Note: My constructor is private because this SHOULD be a readonly object.  Setting it public doesn’t seem to matter either. ๐Ÿ˜ฆ

A basic data provider.

public class SISDataProvider


       public ISession Session;


       public SISDataProvider(ISession session)


              Session = session;



       public T GetById<T>(int id)



              return Session.Get<T>(id);



No save functionality—again, we just have readonly access to this database.

A basic session manager.

public class SISSessionManager


       private readonly string _mappingAssembly;

       private readonly ISessionFactory _sessionFactory;


       public SISSessionManager()


              _mappingAssembly = “SIS.Domain”;

              _sessionFactory = GetSessionFactory();



       public ISession GetSession()


              return _sessionFactory.OpenSession();



       private ISessionFactory GetSessionFactory()


              var config = new Configuration();


              var configuration = OracleConfiguration.Oracle9












              return configuration.BuildSessionFactory();



The OracleConfiguration is based on a FluentNhibernate.Cfg.PersistanceConfiguration that I created that calls the OracleClientDriver (not the ODP; that’s OracleDataClientDriver—I’m simply wanting to get the architecture working for now and I’ll dink with increasing performance with ODP as the next step).

Finally, the test.

public class creating_a_student


       private SISDataProvider _provider;

       private SISSessionManager _sessionFactory;


       public creating_a_student()


              _sessionFactory = new SISSessionManager();

              _provider = new SISDataProvider(_sessionFactory.GetSession());




       public void with_a_valid_student_id_selects_the_correct_student()


             var sut = _provider.GetById<Student>(12345);





Unfortunately, all that and I get an error:

creating_a_student.with_a_valid_student_id_selects_the_correct_student : Failed

XunitException: NHibernate.MappingException : No persister for: SIS.Domain.Student

After some debugging, the Sis.Domain.Student is being added to the Mapping collection, but I’m not sure if that’s the problem or not.  A Google of “no persister” pulls up a few NHibernate hits for not having the XML files set to Embedded Resource, which isn’t my problem here—is it?  I thought Fluent NHibernate escaped XMLHell.

I’d appreciate any guidance on this—I’m stumped.

  1. June 26, 2009 at 1:01 pm

    Don’t know if you ever figured this out, but I had the same problem. Turns out that the ClassMap class for the type I was trying to persist wasn’t marked public. To illustrate, I had this:

    class ContactMap : ClassMap

    but I needed this:

    public class ContactMap : ClassMap

    ReSharper, which I used to create the class file, doesn’t put the “public” accessor on the class by default, which is kinda silly. How often are you going to use a non-public class? Anyway, hope that helps!

  2. June 26, 2009 at 1:03 pm

    Just noticed the next blog post. ๐Ÿ˜› Would have been helpful if Google had returned that post instead of this one!

    • June 26, 2009 at 1:08 pm

      *grin* Yeah, computers are stupid… Thanks for the post though.

      WordPress does a semi-okay job at linking similar posts on the blog, but it’s too bad it can’t magically parse out posts and, on older posts, say “hey, he got a bit smarter a few hours later, see [this post].” ๐Ÿ˜‰

  1. No trackbacks yet.
Comments are closed.
%d bloggers like this: