我尝试实现这样的自定义生成器类:
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。
有没有人知道如何在映射文档中正确定义类?
谢谢你。答案 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