2

Castle AR を使用して自動インクリメント主キー値を「シード」する方法を知りたいですか? たとえば、Orders テーブルの主キーを 10000 から開始したい場合、これは 1. 可能なものですか 2. 注文番号を作成するための適切なソリューションですか?

おそらく、10000 にシードされた pk ではない DB に連続した自動インクリメント フィールドを設定する方法がありますか?

4

1 に答える 1

3

Castle ActiveRecord は NHibernate の上に構築されており、AR の機能は NHibernate の機能に大きく依存しています。NHibernate にはいくつかの主キー ジェネレーターが含まれています
。 1. ネイティブ- これはデフォルトのジェネレーターです。これを指定すると、NHibernate は基礎となるデータベースに基づいてジェネレーターの種類を自動的に選択します。たとえば、上記のマッピング スニペットで ID の代わりにネイティブを使用した場合でも、NHibernate は基礎となるデータベース SQL Server を理解するのに十分スマートであり、ID 列をサポートしているため、同じ SQL が得られます。NHibernate は、Convert.ChangeType メソッドを使用して、返された値を変換します。
2. ID - これは、SQL Server、MySQL、Sybase などで提供される ID 列で使用できます
。3.シーケンス- Firebird、DB2、PostgreSQL、Oracle、SAP DB はシーケンス
4をサポートします。インクリメント- このジェネレーターは、シーケンスや ID などのデータベース機能を使用しません。NHibernate は自動的に 1 を最後の主キー値に増分します。このジェネレーターは、単一のデータベース システムを扱う場合に役立ちますが、クラスター ベースの環境では役に立ちません。
5. hilo - Hi/Lo アルゴリズムを使用して主キー値を生成します。これは、他のジェネレータ タイプと比べて非常に効率的です。使用すると、NHibernate は hibernate_unique_key という名前の別のテーブルを作成し、next_hi という名前の列を作成します。NHibernate は、INSERT が発生したときにこのテーブルを参照として使用します。これについては、この記事の後半で詳しく説明します。
6.uuid.hex _- System.Guid とその ToString メソッドを使用して、文字列ベースの主キー値を生成します。
7. guid - クラス プロパティ タイプが Guid の場合に使用できます。
8. guid.comb - これは guid と似ていますが、異なるアルゴリズムを使用して主キー値を生成します。uuid.hex、guid、guid.comb は、SQL Server の列データ型として UNIQUEIDENTIFIER を使用することに注意してください。
9.割り当て済み- 最後になりましたが、このジェネレーターは、主キーの値がユーザーによって割り当てられていることを前提としています。

したがって、そのような組み込み機能がないことがわかります。注文番号を作成するには、次の 2 つの方法を使用できます。
1. 最大注文を選択して手動で設定する
2. データベースに挿入トリガーを追加する
私の意見では、データベースに依存しないため、最初の方法を使用する必要があります。また、オブジェクトを上下に移動する必要がある場合は、この機能を再利用できます。私は通常この方法を使用しています。

于 2009-02-22T19:02:19.700 に答える