2

Nhibernate に、SQL で生成されたもののように、1 ステップの順次主キーを生成するように指示するにはどうすればよいですか?

現在の HiLo アルゴリズムは 4001、次に 5010、6089 などのキーを生成します。複数のアプリ サーバーを管理するためなどだと理解していますが、その問題はありません。
起動時に最高のレコード セット値 (15 など) を取得し、次のレコードを主キー 16 (SQL 側から生成された ID と非常によく似ています) で生成するには、nhibernate が必要です。

4

2 に答える 2

1

なぜNHibernateがこれを行う必要がある/期待するのですか?

要件がわずかに異なる可能性があるため、NHibernate がこのようなシナリオに対して一般的なソリューションを提供することは困難ですが、特定の制約を正確に知っているため、独自のソリューションを提供することは比較的簡単なはずです (手動で割り当てられた ID を使用) )。

アプリケーションの起動時に、データベースにクエリを実行し、現在の最大 ID 値を取得します。挿入するたびにその値を増やします。

于 2010-05-20T12:11:34.393 に答える
1

テーブルを作成:

CREATE TABLE `seq` (
  `ID` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  `HI` bigint(20) unsigned NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO `seq` VALUES ('COMMENT', '0');
INSERT INTO `seq` VALUES ('POST', '0');
INSERT INTO `seq` VALUES ('USER', '0');

FluentNHbiernate を使用して、次のようなマッピングを追加します。

    public class Comment_Map : ClassMap<Comment>
    {
        public Comment_Map()
        {
            Table("COMMENT");

            Id(x => x.ID, "ID").GeneratedBy.HiLo("SEQ", "HI", "0", o => o.AddParam("where", "ID = 'COMMENT'"));
        }
     }
于 2010-05-20T13:52:42.050 に答える