テーブルに主キーフィールドのみが含まれている場合、MVC3で主キーを編集する方法はありますか?たとえば、コンソールテーブルがあり、その中に主キーとしてコンソール名があり、それを編集して変更し、編集した値を保存できるようにしたいと考えています。
あなたが必要とする他の情報があれば私に知らせてください。
テーブルに主キーフィールドのみが含まれている場合、MVC3で主キーを編集する方法はありますか?たとえば、コンソールテーブルがあり、その中に主キーとしてコンソール名があり、それを編集して変更し、編集した値を保存できるようにしたいと考えています。
あなたが必要とする他の情報があれば私に知らせてください。
原則として、主キーは絶対に編集しないでください。SQL Serverの主キーには通常、クラスター化された一意のインデックスがあるため、主キーを編集すると、インデックスを再構築する必要がある可能性があります(毎回ではないかもしれませんが、スキューによって異なります)。
代わりに、SQL ServerのIDENTITY列などの偽の主キーを作成し、Name列にUNIQUE制約を設定します。テーブルが大きくなると、int列でのアイテムの取得は、varchar()列での取得よりも高速になります。
更新: 質問に答えなかったと言われたので(これは受け入れられた答えですが)、SQLServerの主キー値を変更することができます。ただし、参照整合性によって実際の編集が妨げられる可能性があるため、技術的には編集操作ではありません(まだ試していませんので、自由に実験してください)。
操作は次のようになります。
私もすべてをトランザクションで実行します。しかし、記録のためにもう一度述べます。このアプローチを取ることはお勧めしません。
aKzenTが指摘したように、主キーを定義するときは、常に自動番号/ IDまたはシーケンス(Oracle)を使用するのが最善です。特にテキストキーが数バイトより長い場合は、bツリープロセッサが数値キーを見つけて結合する方がはるかに効率的です。キーが小さいほど、検索する必要のあるBツリーページも少なくなります。
もう1つの重要な理由は、自動生成されたキーを変更できないことです。変更可能なテキストキーを使用する場合、外部キーはCASCADE UPDATEを使用する必要があります。これは、多くの(Oracle、DB2など)RDBMSが宣言的にサポートしておらず、トリガーを使用して定義する必要があります。これは非常に複雑です。
あなたの場合、テキストキーを自動生成された主キーに置き換えると問題が解消されます。