Castle AR を使用して自動インクリメント主キー値を「シード」する方法を知りたいですか? たとえば、Orders テーブルの主キーを 10000 から開始したい場合、これは 1. 可能なものですか 2. 注文番号を作成するための適切なソリューションですか?
おそらく、10000 にシードされた pk ではない DB に連続した自動インクリメント フィールドを設定する方法がありますか?
Castle AR を使用して自動インクリメント主キー値を「シード」する方法を知りたいですか? たとえば、Orders テーブルの主キーを 10000 から開始したい場合、これは 1. 可能なものですか 2. 注文番号を作成するための適切なソリューションですか?
おそらく、10000 にシードされた pk ではない DB に連続した自動インクリメント フィールドを設定する方法がありますか?
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. データベースに挿入トリガーを追加する
私の意見では、データベースに依存しないため、最初の方法を使用する必要があります。また、オブジェクトを上下に移動する必要がある場合は、この機能を再利用できます。私は通常この方法を使用しています。