C# のクラスで Linq を使用してテーブルを使用するのは初めてなので、用語が正しくない場合はご容赦ください。また、一般的にデータベースに比較的新しいので、これが私が見落とした基本的なデータベースの概念であるかどうかを教えてください.
以下のような「人」クラスがあり、主キーである Id という列を定義しました。つまり、一意でなければなりません。
また、この ID を手動で指定する必要がないように、isDbGenerated = true も指定しました。
[Table]
public class Person
{
[Column(IsPrimaryKey = true, IsDbGenerated = true)]
public int Id;
...
}
これは、テーブルに行を追加するときにうまく機能します。
テーブルから行を削除すると、行 ID のシーケンスにギャップが残ります。これで問題ありません。
データを保存してテーブルに再ロードしようとすると、問題が発生します。データを保存するために、必要な情報を手動でテキスト ファイルに書き出します。
データをテーブルに再ロードすると、自動的に生成された ID が、情報を保存した元の ID を上書きします。これにより、これらの行を ID で参照する大規模なデータベースで問題が発生します。
例えば。
私のデータベースには次の行が含まれています:
- ID、名前
- 1、ジョン
- 2、ジム
- 4、マーク(注3は途中で削除したため欠落しています)
- 5、デビッド
これらをテキストファイルに保存します。別の機会に、それらをテキスト ファイルから空のテーブルにロードし直します。
- 1、ジョン
- 2、ジム
- 3、マーク
- 4、デビッド
IsDBGenerated 機能により、これらの番号は連続したものになります。
一意の ID を保持しながらテーブルにデータを再ロードできるように、これを設定する最善の方法は何ですか?
編集:自動生成されたキーを使用しても、私の人生は楽になりません。
次に使用する主キーを自己生成する最良の方法は何ですか? を。最後のエントリの後に数字を増やすだけですか? b. GUID を生成しますか? c. 既存の機能?