0

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. 既存の機能?

4

1 に答える 1

0

あなたは私が思わない大きな概念を本当に見逃しているわけではありません。自動生成されたキーで発生する可能性のある固有の問題にぶつかっています。

SQL Server(SQL Serverを使用していますか?)では、ID挿入と呼ばれる機能を使用できます。この機能は、オフ(データベースの自動番号、新しいレコードの挿入に適しています)またはオン(番号を指定する必要があり、読み込みに適しています)にすることができます。ファイルから)。

オン/オフの意味は混乱しやすいので、ドキュメントSETIDENTITY_INSERTをお読みください。

特定のORM(LINQ to SQL、Entity Framework)のコンテキストでこれを行う方法については、正確にはわかりません-実際のこの問題に対する私の答えは、それを回避することでした(つまり、自分自身を入れないでください)。自動生成されたIDをテキストファイルに保存している状況で、アプリケーションロジックのコンテキストでロードバックする必要があります)。

于 2013-01-28T09:15:26.577 に答える