Fehler40
Fehler40

Reputation: 125

nhibernate set custom generator class in mapping file

i try to implement a custom generator class like this:

Creating a custom id generator for nHibernate This example is in fluent Nhibernate and not what I want exactly. I want it for nhibernate with mapping.

I have the following lines of Code:

namespace webportale_ger_webservice.Routinen
{
    public class NextKey : TableGenerator 
    {


    private const Int32 SeedValue = 1048576;

    public override object Generate(ISessionImplementor sessionimpl, object obj)
    {

        var session = NHibernateHelper.GetSession();


        int counter = Convert.ToInt32(base.Generate(sessionimpl, obj));
        return counter + SeedValue + 1;

    }
}

}

Now I want to give this generator class the ID-property of the mapping document, like this:

<hibernate-mapping assembly="webportale ger webservice" namespace="webportale_ger_webservice.Model" xmlns="urn:nhibernate-mapping-2.2">


 <class name="SPTPL" table="SPTPL" lazy="false" >
    <id name="AR" column="AR" generator="webportale_ger_webservice.Routinen.NextKey"/>

But it doesn't work with generator="webportale_ger_webservice.Routinen.NextKey", the error message is the following:

NHibernate.Id.IdentifierGenerationException: Could not interpret id generator strategy: webportale_ger_webservice.Routinen.NextKey bei NHibernate.Id.IdentifierGeneratorFactory.GetIdentifierGeneratorClass(String strategy, Dialect dialect) bei NHibernate.Id.IdentifierGeneratorFactory.Create(String strategy, IType type, IDictionary`2 parms, Dialect dialect) bei NHibernate.Impl.SessionFactoryImpl..ctor(Configuration cfg, IMapping mapping, Settings settings, EventListeners listeners) bei NHibernate.Cfg.Configuration.BuildSessionFactory() bei webportale_ger_webservice.DatabaseInterface.NHibernateHelper..cctor() in C:\Quellen\VSWebNeoBackEnd\VSWebNeoBackEnd\VSWebNeoBackEnd\project india webservice\DatabaseInterface\NHibernateHelper.cs:Zeile 34. --- Ende der internen Ausnahmestapelüberwachung --- bei webportale_ger_webservice.DatabaseInterface.NHibernateHelper.GetSession() bei webportale_ger_webservice.india_webservice.InsertSP_Leistungsort(String vornameStr, String nachnameStr, String strasseStr, String hnrzusatzStr, Int32 hausnrStr, String plzStr, String ortStr, String mailStr, String dateStr, String telStr, String argef, String bemerkungStr, String arstrasse, String arplz) in C:\Quellen\VSWebNeoBackEnd\VSWebNeoBackEnd\VSWebNeoBackEnd\project india webservice\webportale_ger_webservice.asmx.cs:Zeile 382.

Does anyone know how to define the class correctly in mapping documents?

thank you.

Upvotes: 1

Views: 853

Answers (1)

Radim K&#246;hler
Radim K&#246;hler

Reputation: 123861

In case, we provide a type, it is better to use full type name - mostly including the assembly name. So this should work:

<class name="SPTPL" table="SPTPL" lazy="false" >
  //<id name="AR" column="AR" generator="webportale_ger_webservice.Routinen.NextKey"/>
    <id name="AR" column="AR" generator="webportale_ger_webservice.Routinen.NextKey,webportale_ger_webservice"/>

Expecting that the assembly name is webportale_ger_webservice

Upvotes: 2

Related Questions