nhibernate在映射文件

时间:2017-07-24 12:52:00

标签: c# nhibernate

我尝试实现这样的自定义生成器类:

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;

    }
}

}

现在我想给这个生成器类提供映射文档的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:无法解释id生成器策略: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(配置cfg,IMapping映射,设置设置,EventListeners侦听器)      bei NHibernate.Cfg.Configuration.BuildSessionFactory()      bei webportale_ger_webservice.DatabaseInterface.NHibernateHelper..cctor()在C:\ Quellen \ VSWebNeoBackEnd \ VSWebNeoBackEnd \ VSWebNeoBackEnd \ project india webservice \ DatabaseInterface \ NHibernateHelper.cs:Zeile 34。      --- Ende derinternenAusnahmestapelü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。

有没有人知道如何在映射文档中正确定义类?

谢谢你。

1 个答案:

答案 0 :(得分:2)

如果我们提供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