nhibernate 在映射文件中设置自定义生成器 class

nhibernate set custom generator class in mapping file

我尝试像这样实现自定义生成器 class:

Creating a custom id generator for nHibernate 这个例子是流利的 Nhibernate 而不是我想要的。我想要它用于带映射的 nhibernate。

我有以下代码行:

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;

    }
}

}

现在我想给这个生成器 class 映射文档的 ID-属性,像这样:

<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"/>

但是用generator="webportale_ger_webservice.Routinen.NextKey"不行,报错信息如下:

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.

有谁知道如何在映射文档中正确定义class?

谢谢。

如果我们提供 type,最好使用 完整 类型名称 - 主要包括 程序集名称.所以这应该有效:

<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"/>

期望程序集名称是 webportale_ger_webservice