0

私は、独自の自動生成intフィールドを持つように既存のテーブルを更新したいと思います。エンティティフレームワークでこれを行うにはどうしたらいいですか?固有の生成されたint(プライマリキーではない)を持つテーブルを更新する


長い説明:

クライアントは、他のデータベース/簿記のための参照番号として一意の識別子を持っているテーブル内のレコードごとにしたいと思います。通常、私は単純にプライマリキーを使用しますが、この場合、プライマリキーは機密情報(疑いの余地のない設計上の欠陥)です。

このテーブルを更新して、IDとは何の関係もない独自の自動生成intを作成したいと思います(もしそうなら大したことではないと思います)。既存のすべてのレコードに値が生成される可能性もあります。

データベース内のすべての主キー(および参照)を変更する方法もありますが、これはおそらくさらに難しいことです。私は代わりの解決策には開いています。

ありがとうございました。

+2

プロパティに '[DatabaseGenerated(DatabaseGeneratedOption.Identity)]属性を追加してください。 –

+0

ああ、私はこれをもう一度試したことを忘れていました。テーブルにはすでにプライマリキーがあるので、 "テーブル 'Client'に複数のIDカラムが指定されています。テーブルごとに1つのIDカラムしか使用できません。" – cspyr0

+1

EFは一意の列をサポートしていません。コードはまず不可能ですが、データベース内の列を変更することができます。私は 'DataBaseGeneratedOption.Computed'のために行くだろう、これはEFに列自体を更新しないように指示し、データベースがそれを世話するようにする。しかし、EFを通して「ユニークな」コラムを作成することは、悲しいことではありませんが(まだ)不可能ですが、確かに禁止されていません。 –

答えて

0

この問題を解決するために、私はテーブルにすべてをコピーして新しいIDがすべて与えられるようにスクリプトを作成しました。その後、元のレコードの外部キーをコピーに移動しました。その後、私はオリジナルを削除しました。

この複雑なやり方で、私はすべてのIDを独自のものに変更することができ、そのIDを別の場所で心配なく使用することができました。

-1

自動生成したい場合は、自動インクリメントが唯一の解決策です。フロントエンドとは話しません。あなたはユニークな財産に行くことができます。

あなたがsku#00056のようなカスタムナンバリングを話している場合は、ストアドプロシージャを実行する必要があります。

また、もしあれば、フロントエンドコードにアクセスできます。それのために行く。

0

EFに固有のものは何もありませんが、NEWID()T-SQL関数を使用して入力されたプロパティの場合はgenerate unique values for using guid'sのプロパティになります。

また、数値のみの値のプロパティを統合する際に同様の方法でSQL 2012+を使用する場合は、新しいSEQUENCEを作成することもできます。