获取NHibernate以生成HiLo字符串ID
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取NHibernate以生成HiLo字符串ID相关的知识,希望对你有一定的参考价值。
我们有一个庞大的系统通过Unity与其数据源(Navision)松散绑定 - 我们有机会将其交换出来并拥有自己的数据库。
所以我们已经浏览了一下,并且非常喜欢Fluent NHibernate的外观 - 我们试图获得概念验证并交换掉一些服务。
我们想要使用NHibernates HiLo算法 - 不幸的是我们从Navision继承了字符串ID,它的ID是前缀(例如COL00001),所以要匹配我们需要使用字符串Id的接口。
有谁知道我会怎么样......
Id(x => x.ID).GeneratedBy.HiLo("100");
在ID是字符串的地方工作?我们目前正在获取Identity必须是int,long等
谢谢,
安迪
------更新------
我在文章建议中尝试了这个例子但是这个功能已经从Fluent NHibernate的更高版本中删除了 - 但是有一个.Custom - 但我似乎无法让它工作!
public class ManufacturerMap : ClassMap<Manufacturer>
{
public ManufacturerMap()
{
Id(x => x.ID).GeneratedBy.Custom(typeof(StringTableHiLoGenerator));
Map(x => x.Name);
}
}
public class StringTableHiLoGenerator : TableHiLoGenerator
{
public override object Generate(ISessionImplementor session, object obj)
{
return base.Generate(session, obj).ToString();
}
}
最后破解了它...感谢您的帮助 - 这是解决方案以防任何人感兴趣...
注意:在Configure
方法中,IType
必须作为int
传递到基地。
public class ManufacturerMap : ClassMap<Manufacturer>
{
public ManufacturerMap()
{
Id(x => x.ID).GeneratedBy.Custom<StringTableHiLoGenerator>(a => a.AddParam("max_lo", Nexus3General.HiLoGeneratorMaxLoSize.ToString()));
Map(x => x.Name);
}
}
public class StringTableHiLoGenerator : TableHiLoGenerator
{
public override object Generate(ISessionImplementor session, object obj)
{
return base.Generate(session, obj).ToString();
}
public override void Configure(IType type, System.Collections.Generic.IDictionary<string, string> parms, NHibernate.Dialect.Dialect dialect)
{
base.Configure(NHibernateUtil.Int32, parms, dialect);
}
}
我认为你不会设法让标准的HiLo发生器使用字符串。看看创建一个自定义id生成器(可能是一个带字符串的hilo):
http://nhforge.org/wikis/howtonh/creating-a-custom-id-generator-for-nhibernate.aspx
有关您更新的更新
我在流利的维基中找不到任何适当的文档。您可以尝试这种通用方法,而不是您使用的方法:
Id(x => x.Id).GeneratedBy.Custom<IdentityGenerator>()
那样有用吗?如果不是,我认为如果您在fluent-nhibernate邮件列表上发帖,可能会得到最快的响应:
http://groups.google.com/group/fluent-nhibernate
发布的答案也适用于我的情况,其中我有一个字符串作为主键与自定义ID生成器和Nhiberate抛出错误:“类型不是ValueTypeType参数名称:类型”。
以上是关于获取NHibernate以生成HiLo字符串ID的主要内容,如果未能解决你的问题,请参考以下文章
Nhibernate id 具有连续一步递增的 id(HiLo 的替代品)