0

基本上我正在尝试做与这个问题相同的事情,但使用 Fluent NHibernate。

这是我的 id 生成约定:

    public class IdGenerationConvention : IIdConvention
    {
            public void Apply(IIdentityInstance instance)
            {
                    instance.GeneratedBy.HiLo("1000");
            }
    }

现在这很好用,但所有类最终都使用相同的next_hi.

    create table hibernate_unique_key (
            next_hi INTEGER 
    )

有谁知道如何指定每个类都应该使用它自己的next_hi

为了澄清,我想最终得到类似customer_next_hiand的东西order_next_hi,假设它基于列工作。如果它是基于行的,那也很好,只要每个实体都知道哪一行用于其next_hi值。

4

3 回答 3

1

在 Anthony Dewhirt 的博客上发布了一个很好的解决方案:http ://www.anthonydewhirst.blogspot.co.uk/2012/02/fluent-nhibernate-solution-to-enable.html

于 2012-09-10T09:50:33.283 回答
0

有趣的问题,但我想知道你为什么要这样做?在(相当小的)缺点上,您将生成更多的数据库请求。从好的方面来说,您将通过某种因素增加您的代理 ID 空间。但是 Long/BigInt 还不足以将它们全部结合起来吗?(最多 18,446,744,073,709,551,615 个 ID!)

于 2009-09-17T11:58:47.697 回答
0

我还在 Fluent NHibernate Google Group 中问过这个问题,看来唯一的方法是创建一个自定义 id 生成器类,该类继承自 HiLo 或 TableGenerator。据我所知,关键问题是创建种子表的 SQL 语句只执行一次,并且没有内置的覆盖或钩子来让它创建实体特定的列或行。

因此,我需要做一些类似的事情。一旦我有一个有效的实现,我会发布更多。

于 2009-09-15T18:25:12.350 回答