2017-10-29 8 views
-1

従業員と住所の2つのテーブルがあります。すべての従業員は住所を持っていなければなりません。1..1の関係にデータを挿入する方法C#

社員が社員テーブルのPKで、それはアイデンティティや自動インクリメント である私は、私はA dependent property in a ReferentialConstraint is mapped to a store-generated column. Column:

を取得しています、新しいレコードを作成する場合のAddressIdは、それがアイデンティティや自動インクリメント

アドレステーブルにPKです

私は一日を無駄にしましたが、それを修正する方法はまだ分かりません。私はDataBaseプログラミングの初心者です。私はより多くの情報のために写真をアップロードしています

:私は、エンティティフレームワークとC#を使用しています

enter image description here

enter image description here

enter image description here

+0

私は最初にアドレスと従業員を追加しようとしましたが、それでも同じエラーです。 –

+1

あなたのエラーは、FKを計算/設定することができないということです。データベースが生成されるのと同じです。通常、1対1の関係は悪いデザインです。ただし、追加のFKを設定したり、ある列からIDマッピングを削除したり、トランザクションを使用して両方を同時に設定することはできます。チュートリアルhttp://www.entityframeworktutorial.net/add-one-to-one-entities-inentity-framework.aspxは、私が考えるトランザクションのアプローチを使用しています - 私は彼らがアイデンティティの挿入を使用することは疑いますが、の取引も同様です。 – DevilSuichiro

答えて

0

アドレステーブルAddressIdではIsIdentityが変更されましたが、依然として主キーです。そして、これが私の問題を解決しました。

0

それが原因で誤って置か外部キーであります表。

関係の中で特に外来キーの中でChrck。スキーマを削除します。 EDMXファイルを更新する必要があります(モデルからテーブルを "更新"するには十分ではありません。モデルでテーブルを削除して追加する必要があります)。

0

1..1の関係は、リレーショナルデータベースでは実際には不可能です。問題は、他の外部キーに違反しないエンティティを挿入する順序がないことです。従業員を最初に挿入すると、Addressはまだ存在しませんが、従業員なしで住所を挿入することはできません。

私のお勧めの質問は、0-1.1の関係に変更することです。すべての従業員に住所がありますが、は実際にはには住所の従業員が必要です。最初にアドレスを挿入し、従業員に割り当て、次に従業員を挿入します。その後、1つのトランザクションで保存します。

個人的なアドバイス:関係が本当に1..1の場合は、2つのテーブルに分割する理由はありません。テーブルとリレーションシップのポイントは冗長性を避けることです。しかし、に従業員を持つアドレステーブルは、とにかく何にも使えないので、アドレステーブルを従業員テーブルに追加することもできます。これは機能するだけでなく、より高速です。

データベース設計とクラス設計のベストプラクティスは同一ではありません。 C#で2つのクラスに分割する必要があるのは、単一のテーブルでも、その逆でもかまいません。

+0

どうすればいいですか? :D –

+0

他の理由で2つのテーブルが必要ですか? 0-1を使用します。1、それ以外の場合は単一のテーブルに移動します。 – Toxantron

関連する問題