1

私は C# で Entity フレームワークを使用して、2 つのテーブルを結合する方法を見つけようとしています。これを行う方法については、 http://msdn.microsoft.com/en-us/data/jj715646.aspxで参照を見つけました。問題は、2 つのテーブルに同期されていない PK があり、これが要件のように思われることです。これまで、データベース内の 2 つのテーブルから PK を同期することについて心配する必要はありませんでした。1 つのテーブルで ID 挿入をオフにできることはわかっていますが、これは非常に悪い考えであるというコメントを多くの人から見ています。これを行うべきでない場合、各テーブルの PK を同期するにはどうすればよいですか?

データベースに 2 つのテーブルがあります。

ユーザー

  • pkID (整数)
  • 名 (varchar)
  • 姓 (varchar)
  • メール (varchar)
  • ...

LockedFlags (ユーザーのフィールドが編集されないようにロックする)

  • pkID
  • fkUserID
  • bFirstName (ブール値)
  • bLastName (ブール値)
  • bEmail (ブール値)

テーブルへの ID 挿入を削除するのは悪い考えだと人々が考える理由に興味があります... PK の割り当てに MSSQL を使用している場合、データベースにレコードを挿入するときにインスタンスが表示される可能性があります複数の書き込みを処理する場合、2番目のテーブル書き込みは異なる値を取得する可能性があります...

4

1 に答える 1

1

削除されたユーザーを指すユーザー ID を持つ行のように、LockedFlags テーブルに孤立した行があるようです。関係の設定方法によっては、逆の場合もあります。

2 つのテーブルが 1 つのクラスに結合されているエンティティがある場合、エンティティ セットを読み込むと両方のテーブルがクエリされ、一致する行のペアが必要になります。

あなたの LockedFlags には、ロードしようとしているユーザー プロパティがあり、ユーザー テーブルで見つからない可能性があります。

テーブル オプション: 注: MYSQL がわからないので、同等の MSSQL を使用しています。

データ モデルに関するコメント: MYWSQL がレコード ロックをどのように処理するかはわかりませんが、MSSQL のようなものであれば、手動で処理することを心配する必要はありません。

そのまま使用する場合は、データ モデルを再検討することを強くお勧めします。個々の行フィールドを手動でロックしたい場合は、単一のテーブルを使用するのが最善でしょうか?

編集:

ALTER TABLE LockFlags ADD CONSTRAINT
    FK_LockFlags_User FOREIGN KEY
    (
    UserID
    ) REFERENCES User
    (
    pkID
    ) ON UPDATE  NO ACTION 
     ON DELETE  NO ACTION 

GO
于 2013-01-29T12:25:35.893 に答える